输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。
链表结点定义如下:
struct ListNode { int m_nKey; ListNode* m_pNext; };
正常返回倒数第k个结点指针,异常返回空指针.
要求:
(1)正序构建链表;
(2)构建后要忘记链表长度。
数据范围:链表长度满足 1≤≤1000 1≤n≤1000 , ≤ k≤n ,链表中数据满足 0≤≤10000 0≤val≤10000
本题有多组样例输入。
输入说明
1 输入链表结点个数
2 输入链表的值
3 输入k的值
输出一个整数
输入:
8 1 2 3 4 5 6 7 8 4
输出:
5
本题可以采用python面向对象的特性,通过创建node类节点和link类链表,并添加相应的构建链表、获取前置节点和最后一个节点的方法进行操作。
此外,需要注意的是,此题包含不定行输入,因此需要用while True无限循环搭配try...except...抛出输入行为空的错误来解决。
class node:
def __init__(self,num):
self.value=num
self.front=None
self.next=None
class link:
def __init__(self):
self.linklist=[]
def add(self,node):
if len(self.linklist)==0:
self.linklist.append(node)
else:
self.linklist[-1].next=node
node.front=self.linklist[-1]
self.linklist.append(node)
def getfront(self,node):
if node.front is None:
return None
else:
return node.front
def getlastnode(self):
return self.linklist[-1]
while True:
try:
length=int(input())
if not length:
break
numlist=list(map(int,input().split()))
k=int(input())
nodelist=[node(num) for num in numlist]
thislink=link()
for obj in nodelist:
thislink.add(obj)
lastnode=thislink.getlastnode()
for i in range(k-1):
lastnode=thislink.getfront(lastnode)
print(lastnode.value)
except:
break