力扣鍊錶問題小結

2021-10-11 18:11:54 字數 2498 閱讀 7263

面試常問問題(一般是與鍊錶的長度和位置有關):

①獲取倒數第k個元素

②獲取中間位置的元素

③判斷鍊錶是否存在環

④判斷環的長度

解決方法:雙指標(一種思想)

輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾節點是倒數第1個節點。例如,乙個鍊錶有6個節點,從頭節點開始,它們的值依次是1、2、3、4、5、6。這個鍊錶的倒數第3個節點是值為4的節點。

示例:給定乙個鍊錶: 1->2->3->4->5, 和 k = 2.返回鍊錶 4->5.

想法:設有兩個指標 p 和 q,初始時均指向頭結點。首先,先讓 p 沿著 next 移動 k 次。此時,p 指向第 k+1個結點,q 指向頭節點,兩個指標的距離為 k 。然後,同時移動 p 和 q,直到 p 指向空,此時 q 即指向倒數第 k 個結點。

給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。

示例:給定乙個鍊錶: 1->2->3->4->5, 和 n = 2.當刪除了倒數第二個節點後,鍊錶變為 1->2->3->5.

/**

* definition for singly-linked list.

* public class listnode

* listnode(int val)

* listnode(int val, listnode next)

* }*/class solution

//如果fast為空,表示刪除的是頭結點.這裡也要注意,刪除頭節點的情況。

if(fast == null)

//注意這裡的while迴圈中終止條件是fast.next != null,上乙個是fast!=null

while(fast.next != null)

slow.next = slow.next.next;

return head;}}

給定乙個頭結點為 head 的非空單鏈表,返回鍊錶的中間結點。如果有兩個中間結點,則返回第二個中間結點。

示例 1:

輸入:[1,2,3,4,5]

輸出:此列表中的結點 3 (序列化形式:[3,4,5])

返回的結點值為 3 。 (測評系統對該結點序列化表述是 [3,4,5])。

注意,我們返回了乙個 listnode 型別的物件 ans,這樣:

ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next = null.

想法:設有兩個指標 fast 和 slow,初始時指向頭節點。每次移動時,fast向後走兩次,slow向後走一次,直到 fast 無法向後走兩次。這使得在每輪移動之後。fast 和 slow 的距離就會增加一。設煉表有 n 個元素,那麼最多移動 n/2 輪。當 n 為奇數時,slow 恰好指向中間結點,當 n 為 偶數時,slow 恰好指向中間兩個結點的靠後乙個。

給定乙個鍊錶,判斷鍊錶中是否有環。

如果鍊錶中有某個節點,可以通過連續跟蹤 next 指標再次到達,則鍊錶中存在環。 為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鍊錶中沒有環。注意:pos 不作為引數進行傳遞,僅僅是為了標識鍊錶的實際情況。

如果鍊錶中存在環,則返回 true 。 否則,返回 false 。

想法:慢指標針每次走一步,快指標每次走兩步,如果相遇就說明有環,如果有乙個為空說明沒有環。

/**

* definition for singly-linked list.

* class listnode

* }*/public class solution

return false;}}

力扣 鍊錶 (21 83 )

這篇部落格持續更新,博主力扣刷題到哪更新到哪。希望大家支援 當l1 l2任意乙個為空 非遞迴解法 class solution listnode cur head listnode pre head listnode check head.next while cur null else if cu...

相交鍊錶 力扣

判斷兩個鍊錶長度,然後求差 times.讓指向較長鍊錶的指標先走times步,然後兩個指標同時向前走,當指向的位址相同的時候返回。1.判斷鍊錶長度 while a 2.讓指標向前走time次 while times 最終 definition for singly linked list.struc...

力扣 翻轉鍊錶

原題如下 206.反轉鍊錶 我先試試手擼一遍 試試,沒有任何提示的那種 這是給出的節點資訊 definition for singly linked list.public class listnode class solution 遍歷完成後,現在的pre即時翻轉完成後鍊錶的頭節點 return ...