LeetCode160.相交链表

编写一个程序,找到两个单链表相交的起始节点。

例如,下面的两个链表:

A:          a1 → a2
                   ↘
                     c1 → c2 → c3
                   ↗            
B:     b1 → b2 → b3

在节点 c1 开始相交。

注意:

  • 如果两个链表没有交点,返回 null.
  • 在返回结果后,两个链表仍须保持原有的结构。
  • 可假定整个链表结构中没有循环。
  • 程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。
    /**
     * 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) {
            if (headA == null || headB == null) {
                return null;
            }
            int lenA = len(headA);
            int lenB = len(headB);
            if (lenA>lenB) {
                while (lenA != lenB) {
                    headA = headA.next;
                    lenA--;
                }
            } else {
                while (lenA != lenB) {
                    headB = headB.next;
                    lenB--;
                }
            }
            while (headA != headB) {
                headA = headA.next;
                headB = headB.next;
            }
            
            return headA;
        }
        private int len(ListNode headA) {
            int len = 0;
            while (headA != null) {
                headA = headA.next;
                len++;
            }
            return len;
        }
    }

猜你喜欢

转载自www.cnblogs.com/airycode/p/9778224.html