LeetCode 160 Intersection of Two Linked Lists
来源:互联网 发布:常用的有限元分析软件 编辑:程序博客网 时间:2024/05/18 15:56
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.
时间复杂度是O(n)的话,刚开始看,一下子没了思路。于是参考了陆草纯的思路,如下:
可以将A,B两个链表看做两部分,交叉前与交叉后。
交叉后的长度是一样的,因此交叉前的长度差即为总长度差。
只要去除这些长度差,距离交叉点就等距了。
为了节省计算,在计算链表长度的时候,顺便比较一下两个链表的尾节点是否一样,
若不一样,则不可能相交,直接可以返回NULL
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {if (headA == null || headB == null) return null;ListNode tmpA = headA;ListNode tmpB = headB;int lenA = 0;int lenB = 0;while (tmpA != null){tmpA = tmpA.next;lenA++;}while (tmpB != null){tmpB = tmpB.next;lenB++;}if (tmpA != tmpB) return null;int dif = lenA - lenB;tmpA = headA;tmpB = headB;while (dif > 0){tmpA = tmpA.next;dif--;}while (dif < 0){tmpB = tmpB.next;dif++;}while (tmpA != tmpB){tmpA = tmpA.next;tmpB = tmpB.next;}return tmpA;}
0 0
- leetcode 160-Intersection of Two Linked Lists
- leetcode 160: Intersection of Two Linked Lists
- LeetCode(160) Intersection of Two Linked Lists
- [leetcode 160] Intersection of Two Linked Lists
- leetCode #160 Intersection of Two Linked Lists
- LeetCode(160) Intersection of Two Linked Lists
- LeetCode[160]Intersection of Two Linked Lists
- [LeetCode 160]Intersection of Two Linked Lists
- [LeetCode][160][Intersection of Two Linked Lists ]
- leetcode-160 Intersection of Two Linked Lists
- leetcode 160Intersection of Two Linked Lists
- LeetCode 160 :Intersection of Two Linked Lists
- leetcode[160]:Intersection of Two Linked Lists
- leetcode-160-Intersection of Two Linked Lists
- [Leetcode 160] Intersection of Two Linked Lists
- leetcode 160: Intersection of Two Linked Lists
- [Leetcode]#160 Intersection of Two Linked Lists
- LeetCode 160 Intersection of Two Linked Lists
- oracle 的 row_number over 去除重复数据
- 用括号法递归建立二叉树
- CAS解决单点登录SSO
- HDU 3622 Bomb Game 2-SAT 二分答案
- Java游戏培训机构哪家专业
- LeetCode 160 Intersection of Two Linked Lists
- Java中普通代码块,构造代码块,静态代码块区别及代码示例
- 畅通工程
- 猜数字游戏
- SecureCRT连不上Linux虚拟机的一种可能
- PLM(Product Lifecycle Management)System
- 《Java程序设计基础》 第6章手记
- C语言库函数一
- C++精进篇(四)之―结构体和头文件