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