leetcode解题之160# Intersection of Two Linked Lists Java版 (两个链表的第一个公共结点)
2017-03-14 15:04
519 查看
160. 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.
查找两个链表的第一个公共节点,如果两个节点的尾节点相同,肯定存在公共节点
方法: 长的链表开始多走 (h1的数量 - h2的数量)步,然后和短链表同步往下走,遇到的第一个相同的节点就是最早的公共节点
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
public ListNode getIntersectionNode(ListNode headA, ListNode headB) { if (headA == null || headB == null) return null; ListNode h1 = headA; ListNode h2 = headB; // lenA为A链表的长度,初始值为1 int lenA = 1; int lenB = 1; while (h1.next != null) { lenA++; h1 = h1.next; } while (h2.next != null) { lenB++; h2 = h2.next; } // 若A与B尾结点不同,则肯定没有相交。 if (h1 != h2) return null; else { int count = Math.abs(lenA - lenB); //h1指向链表长的头结点。 if (lenA >= lenB) { h1 = headA; h2 = headB; } else { h1 = headB; h2 = headA; } for(int i=0;i<count;i++) h1=h1.next; while(h1 != null&&h2 != null && h1 != h2){ h1 = h1.next; h2 = h2.next; } } //若没有交点,则h1 为null return h1; }
相关文章推荐
- LeetCode 160. Intersection of Two Linked Lists(两个链表的第一个公共结点)
- [leetcode]Intersection of Two Linked Lists[java]找出两个链表的公共节点
- 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告
- Intersection of Two Linked Lists(两个链表的第一个公共节点)
- [LeetCode]160.Intersection of Two Linked Lists(2个链表的公共节点)
- 剑指Offer面试题37(Java版):两个链表的第一个公共结点
- 剑指Offer面试题37(Java版):两个链表的第一个公共结点
- 【leetcode 两个链表的交集点】Intersection of Two Linked Lists
- Lettcode_160_Intersection of Two Linked Lists ——寻找两个链表的第一个交汇点
- (LeetCode)Intersection of Two Linked Lists --- 两个链表的交集
- leetcode:Intersection of Two Linked Lists(两个链表的交叉点)
- 35.两链表的第一个公共结点[Find the first common node of two linked list]
- 两个链表的第一个公共结点(java版)
- LeetCode—Intersection of Two Linked Lists 找两个链表的相交位置,让长的链表先走一段
- [置顶] LeetCode--Intersection of Two Linked Lists (两个链表的交点)Python
- 牛客:剑指offer:两个链表的第一个公共结点(Java)
- 【leetcode 两个链表的交集点】Intersection of Two Linked Lists
- LeetCode 21 Merge Two Sorted Lists(合并两个已排序的链表)(Linked List)
- [LeetCode-160] Intersection of Two Linked Lists(找到两链表公共交叉点)
- LeetCode 160. Intersection of Two Linked Lists (两个链表的交点)