
Question
Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
1 2 3 4 5
|
A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3
|
begin to intersect at node c1.
Notes:
- If the two linked lists have no intersection at all, return
null.
- The linked lists must retain their original structure after the function returns.
- You may assume there are no cycles anywhere in the entire linked structure.
- Your code should preferably run in O(n) time and use only O(1) memory.
Answer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { int lenA = getLength(headA); int lenB = getLength(headB); while(lenA<lenB){ headB = headB.next; lenB--; } while(lenA>lenB){ headA = headA.next; lenA--; } while(headA!=headB){ headA = headA.next; headB = headB.next; } return headA; } public int getLength(ListNode node){ int length = 0; while(node!=null){ length++; node = node.next; } return length; } }
|
近期评论