專題 鍊錶雙指標問題(快慢指標 相遇指標)

2021-10-05 10:24:52 字數 1582 閱讀 9997

雙指標:分別指向兩個鍊錶,每個鍊錶各自乙個指標

快慢指標:指向同乙個鍊錶,一前一後,前進速度不同

相遇指標:指向同乙個有環鏈表,一前一後,前進速度不同

面試題22. 鍊錶中倒數第k個節點

/**

* definition for singly-linked list.

* public class listnode

* }*/class

solution

while

(fast != null && k ==0)

if(k !=0)

return null;

// 魯棒性:head沒有k那麼長

return slow;

}}

鍊錶的中間結點

獲取鍊錶中間的元素,若節點數為奇數 2n,獲取第 n+1 個節點

/**

* definition for singly-linked list.

* public class listnode

* }*/class

solution

return slow;

}}

環形鍊錶

/**

* definition for singly-linked list.

* class listnode

* }*/public

class

solution

return

true;}

}

判斷鍊錶內環的長度

快慢指標相遇後繼續移動,直到第二次相遇。兩次相遇間的移動次數即為環的長度

public

class

solution

// 第二次迴圈至兩指標相遇

int length =0;

while

(slow != fast)

return length;

}}

面試題52. 兩個鍊錶的第乙個公共節點

(160. 相交鍊錶)

/**

* definition for singly-linked list.

* public class listnode

* }*/public

class

solution

return a;

}}

面試題25. 合併兩個排序的鍊錶

21. 合併兩個有序鍊錶

/**

* definition for singly-linked list.

* public class listnode

* }*/class

solution

else

l = l.next;

} l.next =

(l1 != null)

? l1 : l2;

return head.next;

}}

快慢指標相遇問題

為什麼用快慢指標找鍊錶的環,快指標和慢指標一定會相遇,並且相遇時必然只繞了一圈?這個問題你可以用數學歸納法來思考。首先,由於鍊錶是個環,所以相遇的過程可以看作是快指標從後邊追趕慢指標的過程。那麼做如下思考 1 快指標與慢指標之間差一步。此時繼續往後走,慢指標前進一步,快指標前進兩步,兩者相遇。2 快...

快慢指標 雙指標

雙指標 二 左右指標的常用演算法 鏈結 利用快慢指標 最開始slow與fast指標都指向鍊錶第乙個節點,前者解決主要解決鍊錶中的問題,listnode detectcycle listnode head slow head while slow fast return slow 設相遇點距環的起點的...

鍊錶快慢指標

public listnode removenthfromend listnode head,int n 為了找到要刪除的節點的前乙個節點,所以此處讓fast.next null while fast.next null 此時head為倒數第n個節點的前乙個節點。slow.next slow.nex...