LeetCode 160 - Intersection of Two Linked Lists
程序员文章站
2024-01-18 16:34:52
...
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.
public ListNode getIntersectionNode(ListNode headA, ListNode headB) { if(headA == null || headB == null) return null; ListNode a = headA, b = headB; int m = 0; while(a != null) { m++; a = a.next; } int n=0; while(b != null) { n++; b = b.next; } a = headA; b = headB; while(m>n) { m--; a = a.next; } while(n>m) { n--; b = b.next; } while(a != null) { if(a == b) return a; a = a.next; b = b.next; } return null; }
重构了一下代码:
public ListNode getIntersectionNode(ListNode headA, ListNode headB) { int lenA = length(headA), lenB = length(headB); if(lenA > lenB) return getIntersectionNode(headA, lenA, headB, lenB); return getIntersectionNode(headB, lenB, headA, lenA); } private int length(ListNode head) { int len = 0; while(head != null) { len++; head = head.next; } return len; } private ListNode getIntersectionNode(ListNode a, int m, ListNode b, int n) { for(int i=0; i<m-n; i++) a = a.next; while(a != null && b != null) { if(a == b) return a; a = a.next; b = b.next; } return null; }
推荐阅读
-
LeetCode 160 - Intersection of Two Linked Lists
-
Leetcde每日一题:160.intersection-of-two-linked-lists(相交链表)
-
LeetCode C++ 599. Minimum Index Sum of Two Lists【Hash Table】简单
-
LeetCode 21. 合并两个有序链表 Merge Two Sorted Lists
-
[LeetCode]Merge Two Sorted Lists(Python)
-
LeetCode刷题笔记(Intersection of Two Arrays II)
-
LeetCode 350. Intersection of Two Arrays II
-
leetcode 349. Intersection of Two Arrays(C语言)10
-
LeetCode 350. Intersection of Two Arrays II
-
Leetcode【121】 Merge Two Sorted Lists(Java版)-附测试代码