劍指offer 鏈表中倒數第k個結點 python

題目描述

輸入一個鏈表,輸出該鏈表中倒數第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]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章