劍指 Offer 22. 連結串列中倒數第k個節點
阿新 • • 發佈:2020-08-08
- 題目描述
輸入一個連結串列,輸出該連結串列中倒數第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.nextwhile p1: p1, p2 = p1.next, p2.next return p2