Intersection of Linked ListsTotal Accepted:
8676 Total Submissions:
32571
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.
Analysis
Solution One:
First cycle, find out the length difference of two lists n
The second cycle, the long list go first n steps, and then move at the same time to determine whether there is the same node
Solution Two:
After the list to the tail, jump to another list of the head, the meeting point is intersection points.
[Precautions]
NONE
[CODE]
Solution One:
/** * Definition for singly-linked list. * public class ListNode {* int val; * List Node Next; * ListNode (int x) {* val = x; * next = NULL; *} *} */public class Solution {public ListNode Getintersectionnode (ListNode Heada, ListNode headb) {if (Heada==null | | headb==null) return NULL; ListNode p = Heada; ListNode q = headb; int pcount = 0; int qcount = 0; while (P.next! = NULL | | Q.next! = NULL) {if (p = = q) return p; if (p.next! = null) p = p.next; else ++qcount; if (q.next! = null) q = q.next; else ++pcount; if (P! = q) return null; p = Heada; Q = headb; while (pcount--! = 0) {p = p.next; } while (Qcount--! = 0) {q = Q.next; } while (P! = q) {p = p.next; Q = q.next; } return p; }}
Solution Two:
/** * Definition for singly-linked list. * public class ListNode {* int val; * ListNode Next; * listnode (int x) {* val = x; * next = null; *< c5/>} *} */public class Solution {public ListNode getintersectionnode (ListNode heada, ListNode headb) { if (Heada ==null | | Headb==null) return null; ListNode p = heada; ListNode q = headb; if (p = = q) return p; while (P!=null && q!=null) { p = p.next; Q = q.next; } if (p==null) p = headb; else q = Heada; while (P!=null && q!=null) { p = p.next; Q = q.next; } if (p==null) p = headb; else q = Heada; while (P!=null && q!=null) { if (p==q) return p; p = p.next; Q = q.next; } return null;} }
Leetcode 160:intersection of Linked Lists