Intersection of Two Linked Lists

Write a program to find the node at which the intersection of two singly linked lists begins.

For example, the following two linked lists:

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

直接上代码:

 1 public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
 2         int lenA = getLength(headA);
 3         int lenB = getLength(headB);
 4         ListNode curA = headA;
 5         ListNode curB = headB;
 6         int count = lenA > lenB ? lenA - lenB : lenB - lenA;
 7         if (lenA > lenB) {
 8             for (int i = 0; i < count; i++) {
 9                 curA = curA.next;
10             }
11         }else{
12             for (int i = 0; i< count; i++) {
13                 curB = curB.next;
14             }
15         }
16         while (curA != null && curB != null) {
17             if (curA.val == curB.val) {
18                 return curA;
19             }
20             curA = curA.next;
21             curB = curB.next;
22         }
23         return null;
24     }
25     
26     private int getLength(ListNode head) {
27         ListNode dummy = new ListNode(0);
28         ListNode cur = dummy;
29         dummy.next = head;
30         int count = 0;
31         while (cur != null) {
32             cur = cur.next;
33             count++;
34         }
35         return count;
36     }
原文地址:https://www.cnblogs.com/gonuts/p/4647894.html