LeetCode160-------相交連結串列(java)
阿新 • • 發佈:2018-12-31
題目中文連結
編寫一個程式,找到兩個單鏈表相交的起始節點。
例如,下面的兩個連結串列:
節點 c1 開始相交。
注意:
如果兩個連結串列沒有交點,返回 null.
在返回結果後,兩個連結串列仍須保持原有的結構。
可假定整個連結串列結構中沒有迴圈。
程式儘量滿足 O(n) 時間複雜度,且僅用 O(1) 記憶體。
解題思路:
1.先分別計算兩個連結串列a和b的長度,長度差記為lena-lenb(假設a比b長)
2.長度大的a 從頭節點先走lena-lenb個長度,這時a和b一樣長
3.然後挨個節點進行比較
程式碼:
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public ListNode getIntersectionNode(ListNode headA, ListNode headB) { int lena = 0; int lenb = 0; ListNode tempa = headA; ListNode tempb = headB; while(tempa != null){ lena++; tempa = tempa.next; } while(tempb != null){ lenb++; tempb = tempb.next; } tempa = headA; tempb = headB; if(lena > lenb){ for (int i = 0; i < lena-lenb; i++) { tempa = tempa.next; } } else{ for (int i = 0; i < lenb-lena; i++) { tempb = tempb.next; } } while(tempa != null && tempb != null && tempa.val != tempb.val){ tempa = tempa.next; tempb = tempb.next; } return tempa; }