python鍊錶 找到鍊錶的倒數第k個節點

2021-10-01 01:47:14 字數 2038 閱讀 6806

輸入:1->2->3->4->5->6->7, k=3

輸出:節點5

思路:

方法1:兩次順序遍歷,第一次求得鍊錶長度size,第二次遍歷到size-k的位置,cur.next就是對應的節點

方法2:引入兩個相隔k個長度的外部變數cur1, cur2,當cur2.next為none時,cur1正好是倒數第k個節點

**:

def get_data(head, k):

if head is none:

print("the link is none")

return

size = 0

cur = head

while cur:

size += 1

cur = cur.next

if k <= size:

index = size - k

cur2 = head

count = 0

# 當count=index時跳出迴圈,index位置對應的是cur2值,k是index下乙個值,k對應的是cur2.next值,自己畫畫圖,代入資料會比較形象些

while count < index:

count += 1

cur2 = cur2.next

return cur2

else:

print(k, "is out of index")

def get_data2(head, k):

if head is none:

print("the link is none")

return

if k <= 0:

print(k, " is invalid value")

return

cur1 = head

cur2 = head

count = 1

try:

while count < k:

count += 1

cur2 = cur2.next

while cur2.next is not none:

cur1 = cur1.next

cur2 = cur2.next

except attributeerror:

print(k, "is out of index")

return

return cur1

# 測試

link = linkedlist()

print("*****====before**********===")

link.add(1)

link.add(2)

link.add(3)

link.add(4)

link.add(5)

link.add(6)

link.add(7)

link.print_link()

print("*****====get_data**********===")

print("get_data(link.head, 3):", get_data(link.head, 3).data)

get_data(link.head, 8)

print("**********=get_data2**********===")

print("get_data2(link.head, 3):", get_data2(link.head, 3).data)

get_data2(link.head, 8)

# 結果

*****====before**********===12

3456

7*****====get_data**********===

get_data(link.head, 3): 5

8 is out of index

**********=get_data2**********===

get_data2(link.head, 3): 5

8 is out of index

找到鍊錶的倒數第n個結點

解法一 蠻力法 從鍊錶的第乙個結點開始,統計當前節點後面的節點個數。如果後面結點的個數小於n 1,那麼演算法結束並返回訊息 鍊錶中的節點個數不足。如果數量大於n 1,則移動到下乙個結點 作為新的當前結點 重複該過程直至當前結點後面的結點個數等於n 1,演算法結束。時間複雜度為o n 2 對於每個結點...

查詢鍊錶倒數的節點

雖然馬上要實習了,但是基本的東西不要忘了,把以前一些東西繼續溫故知新。對於查詢鍊錶倒數的節點這個問題,就比較經典了,老生常談的。大家都知道,最經典的解法就是首先找到k 1個,然後兩個指標,一前一後跑,知道後面的指標跑到最後乙個,前面的指標也就是指向了倒數第k個節點了。不過在這裡需要注意以下幾種情況。...

LeetCode鍊錶 19刪除鍊錶的倒數第N個節點

給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。示例 給定乙個鍊錶 1 2 3 4 5,和 n 2.當刪除了倒數第二個節點後,鍊錶變為 1 2 3 5.說明 給定的 n 保證是有效的。高階 你能嘗試使用一趟掃瞄實現嗎?我採取一次掃瞄來實現。1.定義兩個指標,令他們相隔n的距離,則前...