问题描述
找出单链表中的倒数第K个元素,例如,1->2->3->4->5->6->7,则其倒数第三个元素为5
分析与解法
方法一 根据问题特点我们很自然的想到先把链表遍历一遍得出链表的长度,然后顺求第
个元素,但是这需把链表遍历两次。
方法二 快慢指针法,将快指针提前移动
个位置然后一起同时移动快慢指针,当快指针遍历完了之后,此时慢指针的位置即为倒数第
个元素的位置。
Python代码
class Node:
def __init__(self,data=None,next=None):
self.data = data
self.next = next
# 打印节点函数
def printlist(head):
cur=head.next
while cur!=None:
print(cur.data)
cur=cur.next
def build():
i = 1
head = Node()
temp = None
cur = head
while i<8:
temp=Node()
temp.data=i
cur.next = temp
cur = cur.next
i += 1
return head
# 找出第K个节点的值
def findk(head,k):
if head ==None or head.next ==None:
return None
slow = Node()
fast = Node()
slow = head.next
fast = head.next
i = 0
while i<k and fast!=None:
fast = fast.next
i += 1
if i<k:
return None
while fast!=None:
slow=slow.next
fast=fast.next
return slow
if __name__ =="__main__":
head = build()
result = None
print("链表:")
printlist(head)
result=findk(head,3)
if result!=None:
print("\n链表倒数第3个元素为:"+str(result.data))
参考文献
《剑指offer》
《python程序员面试算法宝典》