雙指標:分別指向兩個鍊錶,每個鍊錶各自乙個指標
快慢指標:指向同乙個鍊錶,一前一後,前進速度不同
相遇指標:指向同乙個有環鏈表,一前一後,前進速度不同
面試題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...