一、问题描述
Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
begin to intersect at node c1.
二、思路分析
这道题跟删除尾部第n个结点差不多。只不过这里的n是两个链表的长度差,同时移动时还要考虑后一个结点是否相同。
三、代码实现
/**
* 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) {
if(headA == NULL || headB == NULL) return NULL;
int na = 0, nb = 0, n = 0, i = 1;
//下面的while循环中,headA,headB都后移了,所以要先保存下
ListNode* tempA = headA;
ListNode* tempB = headB;
while(headA->next != NULL) {
na++;
headA = headA->next;
}
while(headB->next != NULL) {
nb++;
headB = headB->next;
}
if(na>=nb){
n = na - nb;
while(i<=n){
tempA = tempA->next;
i++;
}
while(tempA != tempB){
tempA = tempA->next;
tempB = tempB->next;
}
return tempA;
}else{
n = nb - na;
while(i<=n){
tempB = tempB->next;
i++;
}
while(tempA != tempB){
tempA = tempA->next;
tempB = tempB->next;
}
return tempB;
}
}
};