Write a program to find the node at which the intersection of two
singly linked lists begins.nodeFor example, the following two linked lists:指針
A: a1 → a2code
↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3 begin to intersect at node c1.Notes:get
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.it
遍歷兩個LinkedList, 找到各自的長度, 而後讓長的向前走n個節點使得長短相等, 而後共同向前, 相交的位置就是intersectionio
時間O(m+n) 空間O(a)function
public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { int lena = getLength(headA); int lenb = getLength(headB); ListNode nodeA = headA; ListNode nodeB = headB; if (lena > lenb) { for (int i =0; i <lena-lenb; i++) { nodeA = nodeA.next; } } else { for (int i =0; i <lenb-lena; i++) { nodeB = nodeB.next; } } while (nodeA != null && nodeB!= null) { if (nodeA == nodeB) { return nodeA; } nodeA = nodeA.next; nodeB = nodeB.next; } return null; } private int getLength(ListNode head) { int res = 0; while (head != null) { head = head.next; res++; } return res; } }