编写一个程序,找到两个单链表相交的起始节点。
/**
* 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*head1=headA,*head2=headB;
// while(head1)
// {
// while(head2)
// {
// if(head1 == head2)
// {
// return head1;
// }
// else
// {
// head2 = head2->next;
// }
// }
// head2 = headB;
// head1 = head1->next;
// }
// return NULL;
// }
//求出链表长度
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;
}
};