查詢兩個連結串列的交叉節點
阿新 • • 發佈:2019-02-01
1. 問題描述
給定兩個單鏈表,查詢這兩個單鏈表的交叉節點。例如:連結串列listA為:
2. 方法與思路
首先,觀察一下交叉節點的特點。如果兩個連結串列有交叉節點的話,那麼這個交叉節點之後的其他節點都是相同的,也就是說兩個連結串列的結構應該是
也就是說, len(listA)−len(listB)|
時間複雜度
c++程式碼如下:
//求出連結串列長度
int getListLength(ListNode *head)
{
int len = 0;
ListNode *tmp = head;
while(tmp) tmp = tmp->next,len++;
return len;
}
//判斷交叉節點
ListNode *getIntersectionNode(ListNode *headA , ListNode *headB) {
ListNode *a = headA, *b = headB;
int ab = getListLength(a)-getListLength(b);
if(ab > 0)
{
while(ab) a = a->next, ab--;
}
else if(ab < 0)
{
while(ab) b = b->next, ab++;
}
while (a && b)
{
if(a->val == b->val) return a;
a = a->next;
b = b->next;
}
return NULL;
}