Write a program to find the node at which the intersection of the singly linked lists begins.
For example, the following, linked lists:
A: a1→a2 c1→c2→c3 B: b1→b2→b3
Begin to intersect at node C1.
Notes:
- If The linked lists has no intersection at all, return
null
.
- The linked lists must retain their original structure after the function returns.
- You may assume there is no cycles anywhere in the entire linked structure.
- Your code should preferably run in O (n) time and use only O (1) memory.
Credits:
Special thanks to @stellari for adding this problem and creating all test cases.
Hide TagsLinked List
/** Definition for singly-linked list. * struct ListNode {* int val; * ListNode *next; * ListNode (int x) : Val (x), Next (NULL) {}}; */classSolution { Public: ListNode*getintersectionnode (ListNode *heada, ListNode *headb) { intLena=0, lenb=0; ListNode*tempa=Heada; ListNode*tempb=headb; while(Tempa) {LenA++; Tempa=tempa->Next; } while(TEMPB) {LenB++; TEMPB=tempb->Next; } while(lena>LenB) {Heada=heada->Next; LenA--; } while(lenb>LenA) {headb=headb->Next; LenB--; } while(Heada! =headb) {Heada=heada->Next; HEADB=headb->Next; } returnHeada; }};
Intersection of Linked lists two linked list find coincident nodes