Intersection of Two Linked Lists (Java)
来源:互联网 发布:如何制作电脑软件 编辑:程序博客网 时间:2024/05/16 18:28
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.
如果存在intersection,那么A与B最后一定有一些值是一样的,只需截断较长的那条链表的前面abs(len(A),len(B))个元素,此时两个链表就一样长了,然后设一个指针同时往后遍历即可。
source
/** * 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) { int l1 = 0, l2 = 0, value; ListNode h1 = headA; ListNode h2 = headB; if(h1 == null || h2 == null) return null; while(h1.next != null){//java中null要小写 l1++; h1 = h1.next; } while(h2.next != null){ l2++; h2 = h2.next; } h1 = headA; h2 = headB; value = Math.abs(l1 - l2); if(l1 >= l2){ for(int i = 0; i < value;i++){ h1 = h1.next; } while(h1 != null && h1.val != h2.val){//特别注意h1走到尾部的情况,下一个元素未赋初值会抛出null异常 h1 = h1.next; h2 = h2.next; } if(h1 == null) return null; else return h1; } else{ for(int i = 0; i < value; i++){ h2 = h2.next; } while(h1 != null && h1.val != h2.val){ //写的有点复杂,可以和上面合起来 h1 = h1.next; h2 = h2.next; } if(h1 == null) return null; else return h1; } }}
Test
public static void main(String[] args){ ListNode a = new ListNode(1); a.next = new ListNode(2); a.next.next = new ListNode(3); a.next.next.next = new ListNode(4); ListNode b = new ListNode(6); b.next = new ListNode(7); ListNode c = new Solution().getIntersectionNode(a, b); if(c != null) System.out.print(c.val); else System.out.print("null"); }
0 0
- Intersection of Two Linked Lists (Java)
- Java-Intersection of Two Linked Lists
- LeetCode|Intersection of Two Linked Lists-java
- (java)Intersection of Two Linked Lists
- 160. Intersection of Two Linked Lists(java)
- 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
- TCP/IP源码学习(58)——inet_select_addr函数分析
- 还原对于服务器失败 备份集中的数据库备份与现有数据库不同
- (转)dSYM 文件分析工具
- 创意云渲染打造《龙之谷》顶级视觉盛宴
- 未来都是礼物
- Intersection of Two Linked Lists (Java)
- Redis节省空间
- .Net程序员玩转Android开发---(13)ListView单击事件
- Android基本架构
- JSP自定义标签的spring注入
- 大小端
- iOS--XMPP (可扩展消息处理现场协议) 即时通信协议
- hashcode()和equals()详解
- 数据库系统概论笔记整理