1. 程式人生 > 實用技巧 >劍指 Offer 22. 連結串列中倒數第k個節點

劍指 Offer 22. 連結串列中倒數第k個節點

  • 題目描述
輸入一個連結串列,輸出該連結串列中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即連結串列的尾節點是倒數第1個節點。例如,一個連結串列有6個節點,從頭節點開始,它們的值依次是1、2、3、4、5、6。這個連結串列的倒數第3個節點是值為4的節點。



示例:

給定一個連結串列: 1->2->3->4->5, 和 k = 2.

返回連結串列 4->5.
  • 題解一:列表遍歷

自己的解法,一次遍歷,將pead.next依次存入list中,然後直接取倒數-k個值

# Definition for singly-linked list.
#
class ListNode: # def __init__(self, x): # self.val = x # self.next = None def getKthFromEnd(self, head: ListNode, k: int) -> ListNode: ''' 自己的解法,感覺沒啥問題啊,只用一個指標 ''' s = [] while head: stack.append(head) # print(s)
head = head.next return s[-k]
  • 題解二:雙指標

用一個p1和p2分別指向head頭,讓p1先走k個,然後p1和p2一起移動,當p1出連結串列,p2所指向的head則為第k個節點。

    def getKthFromEnd(self, head: ListNode, k: int) -> ListNode:
        #題解解法,雙指標
        p1,p2 = head, head
        for i in range(k):
            p1 = p1.next
        
while p1: p1, p2 = p1.next, p2.next return p2