leetcode解题之160# Intersection of Two Linked Lists Java版 (两个链表的第一个公共结点)
来源:互联网 发布:大熊猫脾气 知乎 编辑:程序博客网 时间:2024/06/04 17:42
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链表的长度,初始值为1int 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 为nullreturn h1;}
0 0
- leetcode解题之160# Intersection of Two Linked Lists Java版 (两个链表的第一个公共结点)
- [leetcode]Intersection of Two Linked Lists[java]找出两个链表的公共节点
- LeetCode OJ 之 Intersection of Two Linked Lists (两个链表的交点)
- LeetCode--Intersection of Two Linked Lists (两个链表的交点)Python
- 【leetcode 两个链表的交集点】Intersection of Two Linked Lists
- 【leetcode 两个链表的交集点】Intersection of Two Linked Lists
- (LeetCode)Intersection of Two Linked Lists --- 两个链表的交集
- LeetCode---(160)Intersection of Two Linked Lists判断两个链表是否相交
- 160.Intersection of Two Linked Lists(两个单链表的相交结点)
- LeetCode 160之Intersection of Two Linked Lists 的Java题解
- leetcode之Intersection of Two Linked Lists
- LeetCode之Intersection of Two Linked Lists
- LeetCode 之 Intersection of Two Linked Lists
- leetcode之Intersection of Two Linked Lists
- leetcode之Intersection of Two Linked Lists
- Leetcode之Intersection of Two Linked Lists
- leetcode之Intersection of Two Linked Lists
- Leetcode 之 Intersection of Two Linked Lists
- 详解struts2中的ActionContext数据中心
- 性能调优之:缓存
- Win7系统安装MySQL5.5.21
- Regex
- ANR问题记录
- leetcode解题之160# Intersection of Two Linked Lists Java版 (两个链表的第一个公共结点)
- 明明安装了Java8,启动Tomcat报错no JDK or JRE found
- Deposit Promotion 30 Free 50 by iBET Malaysia Only(deposit bonus, Deposit Promotion, Free Register i
- Java中的设计模式与原则
- Android中ViewPager+TabLayout+RecyclerView+点击事件的传递
- spring-boot-druid-demo
- mybatis中Oracle数据库的批量增删改操作小结
- B1006
- Android 简单实现缓存机制(反射和数据库)