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; } }