题目描述
输入一个链表,输出该链表中倒数第k个结点。
思路1:这题用Python并不难,主要是利用Python的append完成所有结点的保存。
代码如下:
注意:在function使用return返回list[-k]结点时,并不是返回结点的val,所以使用print函数打印时,本地编译器只是出现“<__main__.ListNode instance at 0x000000000605D108>”类似的输出。
思路2:将链表头赋给两个新指针P1和P2,让指针P1先走k步,然后两个指针同时走,等P1走完,此时P2所指向的结点即为倒数第k个结点。
# -*- coding: utf-8 -*-
"""
Created on Sun Oct 15 19:04:13 2017
@author: gb_xiao
Mail: mingliumengshao@163.com
"""
"""
题目描述:
输入一个链表,输出该链表中倒数第k个结点。
"""
class ListNode():
def __init__(self, x):
self.val = x
self.next = None
def CreateList(n):
if n == 0:
return None
if n ==1:
return ListNode(1)
else:
listNode = ListNode(1)
tmp = listNode
for i in range(2,n+1):
tmp.next = ListNode(i)
tmp = tmp.next
return listNode
def function1(listNode,k):
lists=[]
while listNode:
lists.append(listNode)
listNode = listNode.next
if len(lists) < k or k<=0:
return
else:
return lists[-k]
def function2(listNode,k):
p1 = listNode
p2 = listNode
if k <= 0 or p1 == None:
return
i = 0
while i < k and p1 != None:
i += 1
p1 = p1.next
if p1 == None and k > i:
return
while p1 != None:
p1 = p1.next
p2 = p2.next
return p2
def printlist(listNode):
tmp = listNode
while tmp:
print tmp.val
tmp = tmp.next
def main():
listNode = CreateList(11)
print "已知链表为:"
printlist(listNode)
print "倒数第k个结点"
print function(listNode, 4)
if __name__=="__main__":
main()