"""
找到单链表中的倒数第k个元素, 例如给定单链表:1->2->3->4->5->6->7,则单链表的倒数第k=3个元素为5.
"""
class LNode:
def __init__(self):
self.data = None
self.next = None
# 构造一个单链表
def ConstructList():
i = 1
head = LNode()
tmp = None
cur = head
# 构造第一个链表
while i < 8:
tmp = LNode()
tmp.data = i
cur.next = tmp
cur = tmp
i += 1
return head
def PrintList(head):
"""
方法功能:顺序打印单列表
:param head:
:return:
"""
cur = head.next
while cur is not None:
print(cur.data, end=' ')
cur = cur.next
def FindLastK(head, k):
if head is None or head.next is None:
return head
slow = LNode()
fast = LNode()
slow = head.next
fast = head.next
i = 0
while i < k and fast is not None:
fast = fast.next # 前移k步
i += 1
if i < k:
return None
while fast is not None:
slow = slow.next
fast = fast.next
return slow
if __name__ == '__main__':
head = ConstructList()
result = None
print('链表:')
PrintList(head)
result = FindLastK(head, 3)
if result is not None:
print('\n链表倒数第3个元素是' + str(result.data))
运行结果:
链表:
1 2 3 4 5 6 7
链表倒数第3个元素是5