首先考慮兩個鍊錶無環的情況。
將鍊錶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 ...