Leetcode - Intersection of Two Linked Lists
来源:互联网 发布:淘宝情趣内衣买家秀 编辑:程序博客网 时间:2024/05/16 11:42
Question
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.
Note
- 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.
Java Code
public 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 i = headA; ListNode j = headB; int lenA = 1; int lenB = 1; //统计两个链表的长度 while((i = i.next) != null) lenA++; while((j = j.next) != null) lenB++; //指针i总是指向较长的链表,计算较长链表中需要忽略的前若干个节点 int ignore = 0; if(lenA >= lenB) { ignore = lenA - lenB; i = headA; j = headB; }else { ignore = lenB - lenA; i = headB; j = headA; } //将节点指针i移到第ignore个节点处 for(int count = 0; count < ignore; ++count) i = i.next; //同时遍历两个链表,直到遇到第一个相交的节点 while(i != null){ if(i == j) return i; else { i = i.next; j = j.next; } } //遍历完所有节点也没找到相交节点 return null;}
说明
- 本题如果没有好的处理办法,那么解决问题会很麻烦,而且复杂度也达不到要求。我们可以通过分析发现,两个有交集的单向链表在相交之后实际上就合并为一条链表了,所以可以找到两者在长度上的等量关系,从而可以轻松地找到两者的第一个交点。
0 0
- [leetcode] [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
- Intersection of Two Linked Lists--leetcode
- [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
- LeetCode Intersection of Two Linked Lists
- 深度网络概览
- Android搭建
- oracle SQL竖表转横表
- 自我总结
- EasyDarwin手机直播转发快速显示问题之音频处理过程
- Leetcode - Intersection of Two Linked Lists
- hdu 1166 (改)
- 源码中加入的,防止被偷源码的一种措施
- 汽车节气门为何容易脏?
- 257. Binary Tree Paths
- C经典 输入字符串,并统计字母个数,首字母大写
- Fragment的用法简介
- LineNumberReader的使用:行号的设置与获取
- fcntl 对文件加锁示例