Write a program to find the node at which the intersection of the singly linked lists begins.
Notice
- 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.
Example
The following linked lists:
A: a1 → a2 c1 → c2 → c3 B: b1 → b2 → b3
Begin to intersect at node C1.
Analysis:
You need to get the length of the two list first, and then let the long list go first, and when the length is the same, compare whether two pointers point to the same node, and if so, return to that node.
1 /**2 * Definition for singly-linked list.3 * public class ListNode {4 * int val;5 * ListNode Next;6 * ListNode (int x) {7 * val = x;8 * next = null; 9 * }Ten * } One */ A Public classSolution { - /** - * @param heada:the first list the * @param headb:the second list - * @return: a listnode - * Cnblogs.com/beiyeqingteng - */ + PublicListNode Getintersectionnode (ListNode H1, ListNode h2) { - if(H1 = =NULL|| H2 = =NULL)return NULL; + A intSize1 =size (H1); at intSize2 =size (H2); - - for(inti =0; I < Math.Abs (size1-size2); i++) { - if(Size1 >size2) { -H1 =H1.next; -}Else { inH2 =H2.next; - } to } + - while(H1! =H2) { theH1 =H1.next; *H2 =H2.next; $ }Panax Notoginseng - returnH1; the } + A Private intsize (ListNode head) { the intTotal =0; + while(Head! =NULL) { -total++; $Head =Head.next; $ } - returnTotal ; - } the}
Reprint Please specify source: cnblogs.com/beiyeqingteng/
Intersection of Linked Lists