找兩個鍊錶的公共節點

2021-09-23 21:00:19 字數 728 閱讀 1120

首先考慮兩個鍊錶無環的情況。

將鍊錶a的尾節點指向頭節點從而形成環。用快慢指標遍歷鍊錶b,乙個一次移動2單位,另乙個移動1單位。如果不相遇則不存在公共節點。如果相遇,則讓其中乙個指標指向b,兩個指標以1單位/次的速度移動,直到相遇。相遇時指向的節點就是公共節點的起始。最後記得將a的尾節點恢復。**如下。

其次考慮有環的情況。用快慢指標探測a中是否有環。如果有則,將使p指向a的尾節點,p的next指向null。按照上面的方法遍歷b。如果遍歷的過程中遇到p,則將p指向a繼續遍歷。如果未遇到p或者無環,則不存在公共節點。最後仍然將a的尾節點恢復。

static class linkedlist 

}static linkedlist calc(linkedlist a, linkedlist b)

p.next = a;

if (b == null || b.next == null)

return null;

linkedlist fast = b.next.next, slow = b.next;

while (fast != null && fast.next != null && fast != slow)

if (fast != slow) else

p.next = null;

return slow;

}}public static void main(string args)

找兩個鍊錶的公共節點

首先考慮兩個鍊錶無環的情況。將鍊錶a的尾節點指向頭節點從而形成環。用快慢指標遍歷鍊錶b,乙個一次移動2單位,另乙個移動1單位。如果不相遇則不存在公共節點。如果相遇,則讓其中乙個指標指向b,兩個指標以1單位 次的速度移動,直到相遇。相遇時指向的節點就是公共節點的起始。最後記得將a的尾節點恢復。如下。其...

兩個鍊錶的公共節點

輸入兩個鍊錶,找出它們的第乙個公共結點。因為兩個鍊錶的長度可能不一樣,首先遍歷兩個鍊錶求出兩個鍊錶的長度,假設乙個鍊錶的長度為m,另乙個鍊錶的長度為n,得到m和n的差值dif,讓比較長的那個鍊錶先走dif步,然後再同時遍歷兩個鍊錶,直到遇到相同的節點為止。python coding utf 8 cl...

兩個鍊錶找第乙個公共節點

題目 輸入兩個鍊錶,找出它們的第乙個公共結點 思想 設兩個鍊錶分別為p,q.將p拼接到q之後,將q拼接到p之後,得到兩個新的等長鍊錶p1,q1.在從頭至尾依次對比兩鍊錶結點 第乙個相等的點即為所要找的結點 for examp p 1234 q 98764 拼接之後為 p1 123498764 q1 ...