题目描述
输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。
链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
详细描述:
接口说明
原型:
ListNode* FindKthToTail(ListNode* pListHead, unsignedint k);
输入参数:
ListNode* pListHead 单向链表
unsigned int k 倒数第k个结点
输出参数(指针指向的内存区域保证有效):
无
返回值:
正常返回倒数第k个结点指针,异常返回空指针
输入描述:
输入说明
1 输入链表结点个数
2 输入链表的值
3 输入k的值
输出描述:
输出一个整数
示例1
输入
8
1 2 3 4 5 6 7 8
4
输出
5
#直接列表实现
while True:
try:
n=int(input())
stringlist=[int(i) for i in input().split()]
index=int(input())
if index==0:
print(0)
else:
print(stringlist[-index])
except:
break
#链表形式
class Node():
def __init__(self,item):#节点初始条件有值
self.item=item
self.next=None
#创建链表的类
class SingleLink():
#初始化,给定链表的头部属性
def __init__(self,node=None):
self.__head=node
def is_empty(self):
return self.__head==None #为None返回True,不为None,False
def append(self,newitem):
newnode=Node(newitem)
if self.is_empty():#类之间的函数调用用self.func
self.__head = newnode
else:
currentnode=self.__head
while currentnode.next!=None:
currentnode=currentnode.next
currentnode.next = newnode
# #判断链表的长度
def length(self):
if self.is_empty():
return 0
else:
currentnode=self.__head #代表currentnode指向当前节点的游标与head指针指向同一个节点
lengthcount=1#对比注释部分另一个方法,lengthcount=0
while currentnode.next!=None:
lengthcount+=1
currentnode=currentnode.next
return lengthcount
def show(self, position):
if (position < 0) or (position > self.length()):
return False
else:
currentnode = self.__head
positioncount = 0
while positioncount < position:
currentnode = currentnode.next
positioncount += 1
print(currentnode.item)
while True:
try:
if __name__ == "__main__":
link = SingleLink()
n=int(input())
stringlist=[int(i) for i in input().split()]
for i in stringlist:
link.append(i)
index=int(input())
if index==0:
print(0)
else:
link.show(n-index)
except:
break