0%

02.07. 链表相交

02.07. 链表相交

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
ListNode* curA=headA;
ListNode* curB=headB;
int lenA=0,lenB=0;
while(curA!=NULL){
lenA++;//A长度
curA=curA->next;
}
while(curB!=NULL){
lenB++;//B长度
curB=curB->next;
}
curA=headA;
curB=headB;
//curA become max ,lenA is its length
if(lenB>lenA){
swap(lenA,lenB);
swap(curA,curB);
}
//求长度差
int gap= lenA-lenB;
while(gap--){
curA=curA->next;
}
//遍历curA和curB 遇到相同则直接返回
while(curA!=NULL){
if(curA==curB){
return curA;
}
curA=curA->next;
curB=curB->next;
}
return NULL;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode* curA=headA;
ListNode* curB=headB;
int lenA=0,lenB=0;
while(curA!=NULL){
lenA++;
curA=curA->next;
}
while(curB!=NULL){
lenB++;
curB=curB->next;
}
//为什么还要再次赋值,因为上面next到了NULL,懂否,傻子
curA = headA;
curB = headB;
if(lenB>lenA){
swap(lenA,lenB);
swap(curA,curB);
}
int gap=lenA-lenB;
//移动
while(gap){
curA=curA->next;
gap--;
}
while(curA!=NULL){
if(curA==curB){
return curA;
}
curA=curA->next;
curB=curB->next;
}
return NULL;

}
};
-------------本文结束感谢您的阅读-------------
老板你好,讨口饭吃