LeetCode 相交鏈表
阿新 • • 發佈:2018-09-08
分享圖片 時間 png linked 編寫一個程序 鏈表結構 復雜 bubuko ==
編寫一個程序,找到兩個單鏈表相交的起始節點。
例如,下面的兩個鏈表:
A: a1 → a2
↘
c1 → c2 → c3
↗
B: b1 → b2 → b3
在節點 c1 開始相交。
註意:
- 如果兩個鏈表沒有交點,返回
null
. - 在返回結果後,兩個鏈表仍須保持原有的結構。
- 可假定整個鏈表結構中沒有循環。
- 程序盡量滿足 O(n) 時間復雜度,且僅用 O(1) 內存。
方法一:
1 /* C++ */ 2 /** 3 * Definition for singly-linked list. 4 * struct ListNode { 5 * int val; 6 * ListNode *next; 7 * ListNode(int x) : val(x), next(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { 13 if(headA == NULL || headB == NULL){14 return NULL; 15 } 16 ListNode *a = headA; 17 ListNode *b = headB; 18 // 計算A和B的長度 19 int lenA = 0,lenB = 0; 20 while(a->next != NULL){ 21 a = a->next; 22 lenA++; 23 } 24 while(b->next != NULL){25 b = b->next; 26 lenB++; 27 } 28 int step = lenB - lenA; 29 if(step>0){ 30 //說明B長 31 a = headB; 32 b = headA; 33 }else{// 說明A長 34 a = headA; 35 b = headB; 36 step *= -1; 37 } 38 while(step -- ){ 39 a = a->next; 40 } 41 while(a != b){ 42 a = a->next;b = b->next; 43 } 44 return a; 45 } 46 };
LeetCode 相交鏈表