1. 程式人生 > >相交連結串列(leetcode簡單篇第一百六十題)

相交連結串列(leetcode簡單篇第一百六十題)

編寫一個程式,找到兩個單鏈表相交的起始節點。

例如,下面的兩個連結串列:

A: a1 → a2

c1 → c2 → c3

B: b1 → b2 → b3
在節點 c1 開始相交。

注意:

如果兩個連結串列沒有交點,返回 null.
在返回結果後,兩個連結串列仍須保持原有的結構。
可假定整個連結串列結構中沒有迴圈。
程式儘量滿足 O(n) 時間複雜度,且僅用 O(1) 記憶體

在這裡插入圖片描述

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *
headB) { int lenA = 0,lenB = 0,gap = 0; struct ListNode* a = headA; struct ListNode* b = headB; struct ListNode* meet = NULL; while(a != NULL && a -> next != NULL) { lenA++; a = a -> next; } while(b != NULL && b -> next != NULL) { lenB++; b = b -> next; } if
(b != a) { return NULL; } else { a = headA;b = headB; if(lenA > lenB) { gap = lenA - lenB; while(gap--) { a = a -> next; } } else { gap = lenB - lenA; while(gap--) { b = b -> next; } } while(a && b) { if(a == b) { meet =
a; return a; } a = a -> next; b = b -> next; } } return meet; }