题解 | #输出单向链表中倒数第k个结点#
输出单向链表中倒数第k个结点
http://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d
# 定义一个结点类:有两个参数,self.data存放自定义的数据,self.next存放下一个结点对象的地址
class Node(object):
def __init__(self, data):
#以self为前缀的变量可以供类中的所有方法使用
# 形参data保存传递的数据
self.data = data
# next保存下一个结点对象
self.next = None
# 定义一个链表类
class LinkList(object):
# 头head
def __init__(self, node=None):
self.head = node
# 判断链表是否是空的
def is_empty(self):
if self.head is None:
return True
else:
return False
# 链表尾部添加对象,首先一定得判断一下链表是否是空的
def append(self, item):
# 最开始需要创建一个结点对象,通过这个结点类创建这个结点对象
node = Node(item)
# 首先你得判断一下链表是否是空的
# 如果链表是空的,
if self.is_empty():
# 那你得把结点给head, 所以在之前你就得创建一个结点
self.head = node
else:
# 引入cur变量,相当于一个游标
# self.head存放的是头结点对象的地址,将self.head赋值给cur,相当于此时cur就是指向头结点
cur = self.head
# cur.next指的是下一个结点对象
while cur.next is not None:
cur = cur.next
cur.next = node
# 定义输出打印第num个结点的方法
def print_node(self, num):
# 让游标指向头结点
cur = self.head
# 注意此时游标cur指向的是第一个结点对象,所以打印第num个结点对象,只需要游标向后移动num-1下;
for i in range(0, num - 1):
cur = cur.next
# 只打印游标对象存储的数据
print(cur.data)
if __name__ == '__main__':
while True:
try:
# 输入链表结点个数n
n = int(input())
# 输入链表的值,并利用split方法将字符串分割,返回一个列表
list1 = input().split()
# 输入k的值
k = int(input())
# 注意:这里题目要求,倒数第0个结点的值为0
if k == 0:
print(0)
else:
# 创建一个链表对象
link_list = LinkList()
# 遍历列表中的元素
for i in list1:
# 调用链表对象link_list中的append方法给链表添加对象
link_list.append(i)
link_list.print_node(n - k + 1)
except:
break
class Node(object):
def __init__(self, data):
#以self为前缀的变量可以供类中的所有方法使用
# 形参data保存传递的数据
self.data = data
# next保存下一个结点对象
self.next = None
# 定义一个链表类
class LinkList(object):
# 头head
def __init__(self, node=None):
self.head = node
# 判断链表是否是空的
def is_empty(self):
if self.head is None:
return True
else:
return False
# 链表尾部添加对象,首先一定得判断一下链表是否是空的
def append(self, item):
# 最开始需要创建一个结点对象,通过这个结点类创建这个结点对象
node = Node(item)
# 首先你得判断一下链表是否是空的
# 如果链表是空的,
if self.is_empty():
# 那你得把结点给head, 所以在之前你就得创建一个结点
self.head = node
else:
# 引入cur变量,相当于一个游标
# self.head存放的是头结点对象的地址,将self.head赋值给cur,相当于此时cur就是指向头结点
cur = self.head
# cur.next指的是下一个结点对象
while cur.next is not None:
cur = cur.next
cur.next = node
# 定义输出打印第num个结点的方法
def print_node(self, num):
# 让游标指向头结点
cur = self.head
# 注意此时游标cur指向的是第一个结点对象,所以打印第num个结点对象,只需要游标向后移动num-1下;
for i in range(0, num - 1):
cur = cur.next
# 只打印游标对象存储的数据
print(cur.data)
if __name__ == '__main__':
while True:
try:
# 输入链表结点个数n
n = int(input())
# 输入链表的值,并利用split方法将字符串分割,返回一个列表
list1 = input().split()
# 输入k的值
k = int(input())
# 注意:这里题目要求,倒数第0个结点的值为0
if k == 0:
print(0)
else:
# 创建一个链表对象
link_list = LinkList()
# 遍历列表中的元素
for i in list1:
# 调用链表对象link_list中的append方法给链表添加对象
link_list.append(i)
link_list.print_node(n - k + 1)
except:
break