Intersection of Two Linked Lists
来源:互联网 发布:linux查看jdk安装路径 编辑:程序博客网 时间:2024/06/05 03:19
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.
Credits:
Special thanks to @stellari for adding this problem and creating all test cases.
Have you met this question in a real interview?
很简单的一道题,但是有不同的思路。
1. bruce force O(mn) running time, O (1) space.
2. HashSet O(m + n ) running time, O(m) space.
3. Count the list length and detect the first same node, O(m + n) running time, O (1) space
4. Maintain 2 points, if one pointer get to the end, redirect to the other list. Then find the first common node. O(m + n) running time. O(1) space.
method 3:
/** * 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; ListNode curA = headA; ListNode curB = headB; int lenA = 1, lenB = 1; while(curA.next != null){ curA = curA.next; lenA++; } while(curB.next != null){ curB = curB.next; lenB++; } if(curA != curB){ return null; } ListNode longList = (lenA > lenB) ? headA : headB; ListNode shortList = (lenA > lenB) ? headB : headA; int diff = Math.abs(lenA - lenB); while(diff > 0){ longList = longList.next; diff--; } while(longList != shortList){ longList = longList.next; shortList = shortList.next; } return longList; }}
method 4 :
/** * 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; ListNode curA = headA; ListNode curB = headB; ListNode lastA = null; ListNode lastB = null; while(curA != curB){ if(curA.next != null) curA = curA.next; else{ lastA = curA; curA = headB; } if(curB.next != null) curB = curB.next; else{ lastB = curB; curB = headA; } if(lastA != null && lastB != null && lastA != lastB)//---Detect whether the last element same. return null; } return curA; }}
0 0
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Intersection of Two Linked Lists
- Java生成Hibernate的hbm配置文件
- 利用busybox制作文件系统
- 如何获得Context实例化对象
- ArcGIS教程:半变异函数建模
- iphone 刷固件,越狱,xcode调试相关步骤
- Intersection of Two Linked Lists
- App Store审核指南中文版
- iOS 判断应用是否有使用相机的权限
- mac下安装配置freeglut,设置xcode
- TCP/IP协议 I - 初始知识
- poker indonesia online 20141130 AMAlumni
- 飞思卡尔IMX6处理器的GPIO配置方式
- 输入流和输出流实例
- 读者写者