Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3
begin to intersect at node c1.
Notes:
null
.
Credits:
Special thanks to @stellari for adding this problem and creating all test cases.
1)把其中的一条链首尾相连,组成一个环,这样问题就转化成:判断一条链表是否有环,如果有,求环的入口问题。
2)把两个链表都首尾颠倒顺序,然后比较。比较完之后,再颠倒把链表的顺序,恢复原样。
算法1的代码:
c++
/** * 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||!headB) return NULL; ListNode *p = headB; while(p->next){ p=p->next; } ListNode *tailB = p; tailB->next=headB; ListNode *p1,*p2; p1=headA; p2=headA; while(p1){ p1=p1->next; p2=p2->next; if(p1){ p1=p1->next; }else{ tailB->next = NULL; return NULL; } if(p1==p2){ break; } } if(p1==NULL){ tailB->next = NULL; return NULL; } p2=headA; while(p1!=p2){ p2=p2->next; p1=p1->next; } tailB->next = NULL; return p2; } };
Intersection of Two Linked Lists
原文地址:http://blog.csdn.net/u010786672/article/details/41701317