劍指Offer 程式設計題14 鍊錶中倒數第k個結點

2021-08-21 10:48:57 字數 1959 閱讀 7775

題目:輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。

牛客網:鏈結

leetcode變體:leetcode19: remove nth node from end of list

結點是既有value值,又有指標。

我們可以定義兩個指標。第乙個指標從鍊錶的頭指標開始遍歷向前走k-1,第二個指標保持不動;從第k步開始,第二個指標也開始從鍊錶的頭指標開始遍歷。由於兩個指標的距離保持在k-1,當第乙個(走在前面的)指標到達鍊錶的尾結點時,第二個指標(走在後面的)指標正好是倒數第k個結點

效果示意圖,以鍊錶總共6個結點,求倒數第3個結點為例:

''' k-1 要注意 '''

for i in range(k-1):

if phead.next == none:

return none

else:

phead = phead.next

''' 迴圈條件是.next不為空 '''

while phead.next:

phead = phead.next

ptail = ptail.next

return ptail

列表是可以儲存結點的!但是一定要判斷k的大小,大於list長度或者為0都是不可以的。

# -*- 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

l =

while head:

head = head.next

if len(l) < k or k < 1:

return none

return l[-k]

建立列表:

# -*-coding:utf-8 -*-

class listnode:

def __init__(self, x):

self.val = x

self.next = none

if __name__ == '__main__':

# 建立鍊錶

a = [1,2,3]

# 建立鍊錶

tmp = listnode(a[0])

head = tmp

for each in a[1:]:

tmp.next = listnode(each)

tmp = tmp.next

# 遍歷鍊錶

while head:

print(head.val)

head = head.next

劍指offer第14題 反轉鍊錶

定義乙個函式,輸入乙個鍊錶的頭節點,反轉該鍊錶並輸出反轉後鍊錶的頭節點。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null 限制 0 節點個數 5000 思路 新鍵乙個虛擬前驅節點,每次讓當前節點指向我們的上乙個前驅節點。就可以實現反向整個鍊錶了。其實並不難,鍊錶題自己多畫...

劍指Offer刷題 鍊錶

劍指 offer 18.刪除鍊錶的節點 難度簡單 給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。返回刪除後的鍊錶的頭節點。注意 此題對比原題有改動 示例 1 輸入 head 4,5,1,9 val 5 輸出 4,1,9 解釋 給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的...

劍指offer刷題 14

解決面試題的思路 畫圖讓抽象問題具體化 畫圖 圖形能使抽象的問題具體化 形象化,藉以輔助自己觀察和思考。對於複雜問題,應聘者光用語言未必能說得清楚,這時候可以畫出幾幅圖形,一邊看圖形,一邊講解,面試官就能輕鬆地理解應聘者的思路。二叉樹的映象請完成乙個函式,輸入一顆二叉樹,二叉樹輸出它的映象。二叉樹節...