題目描述
輸入一個鏈表,輸出該鏈表中倒數第k個結點。
思路1:
1. 看到是單鏈表肯定不能反方向循環,倒數第k個節點,比如鏈表長度爲6,倒數第三個也就是相當於正數第四個,符合6-3+1=4。
2. 所以就想到了正向遍歷鏈表兩次,但兩次複雜度又太高,再考慮能不能遍歷一次,進而想到了快慢指針。
3. 先判斷頭結點是否存在和k的大小,然後讓快指針先走到第四個,也就是k的位置,然後慢指針從頭節點開始走,等快指針走到最後,慢指針走道的位置就是結果,返回這個結果就可以了。
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def FindKthToTail(self, head, k):
# write code here
if not head or k < 1:
return None
quick = head
slow = head
for i in range(k):
if quick == None:
return
quick = quick.next
while quick:
quick = quick.next
slow = slow.next
return slow
思路2:
自然而然想到使用容器(列表、堆棧、數組等)保存鏈表,然後直接查詢
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def FindKthToTail(self, head, k):
# write code here
if not head or k<1:
return None
# 使用列表保存鏈表結構
stack = []
cur = head
while cur:
stack.append(cur)
cur = cur.next
# 非法情況,即K大於鏈表長度
if k > len(stack):
return None
return stack[-k]