走到盡頭見不到你,於是走過你來時的路,等到相遇時才發現,你也走過我來時的路。
題目
解法
一種比較巧妙的方式是,分別爲鏈表A和鏈表B設置指針A和指針B,然後開始遍歷鏈表,如果遍歷完當前鏈表,則將指針指向另外一個鏈表的頭部繼續遍歷,直至兩個指針相遇。
若兩個鏈表相交,則指針A和指針B必定在相交結點相遇;若兩個結點不相交,則將會同時到達NULL。
代碼(JAVA)
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if (headA == null || headB == null) return null;
ListNode pA = headA, pB = headB;
while (pA != pB) {
pA = pA == null ? headB : pA.next;
pB = pB == null ? headA : pB.next;
}
return pA;
}
時間複雜度:O(n)
空間複雜度:O(1)
如果對您有幫助,記得留個贊喲~