輸入: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的距離,則前...