(java)Intersection of Two Linked Lists
2015-12-16 11:58
435 查看
Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
begin to intersect at node c1.
Notes:
If the two linked lists have no intersection at all, return
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.
思路:本题是求两个串的最长后缀子串。判断当前相同的位置是不是相同子串中第一位,如果是记录下当前的位置,如果不是则一直向前遍历,如果不相同,则重新开始记
代码如下(已通过leetcode)
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode p=headA;
ListNode q=headB;
int length1=0;
int length2=0;
boolean isfirst=true;
while(p!=null) {length1++;p=p.next;}
while(q!=null) {length2++;q=q.next;}
int a=Math.abs(length1-length2);
if(length1>length2) {
for(int i=0;i<a;i++) headA=headA.next;
} else {
for(int i=0;i<a;i++) headB=headB.next;
}
ListNode flag=null;
ListNode ans=null;
while(headA!=null) {
if(headA.val!=headB.val) {
flag=null;
ans=null;
isfirst=true;
} else {
if(isfirst) {
ans=headA;
isfirst=false;
}
flag=headA;
flag=flag.next;
}
headA=headA.next;
headB=headB.next;
}
return ans;
}
}
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.
思路:本题是求两个串的最长后缀子串。判断当前相同的位置是不是相同子串中第一位,如果是记录下当前的位置,如果不是则一直向前遍历,如果不相同,则重新开始记
代码如下(已通过leetcode)
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode p=headA;
ListNode q=headB;
int length1=0;
int length2=0;
boolean isfirst=true;
while(p!=null) {length1++;p=p.next;}
while(q!=null) {length2++;q=q.next;}
int a=Math.abs(length1-length2);
if(length1>length2) {
for(int i=0;i<a;i++) headA=headA.next;
} else {
for(int i=0;i<a;i++) headB=headB.next;
}
ListNode flag=null;
ListNode ans=null;
while(headA!=null) {
if(headA.val!=headB.val) {
flag=null;
ans=null;
isfirst=true;
} else {
if(isfirst) {
ans=headA;
isfirst=false;
}
flag=headA;
flag=flag.next;
}
headA=headA.next;
headB=headB.next;
}
return ans;
}
}
相关文章推荐
- spring tool suite 的编码设置
- (java)Minimum Depth of Binary Tree
- jdk中的ThreadPoolExecutor
- java 8的新特性
- Android开发中Eclipse报错及对应处理方法总结
- java之Vertx_1_简介
- 利用spring,实现package下的类扫描
- java 自定义注解
- SpringMVC-Mybatis学习总结整理(上)
- java byte【】数组与文件读写
- 深度分析Java的枚举类型—-枚举的线程安全性及序列化问题
- Java开发中的23种设计模式详解(转)
- Spring MVC 框架搭建及详解
- jdk和jre的区别和联系--详细
- maven 设置编译版本为java8 设置字符集为utf8
- [转载]spring+mybatis加载属性文件设置数据源失败原因及解决方案 - 泡在网上的日子
- MyEclipse professional 2014破解教程-转载并修正错误
- java学习笔记-设计模式21(状态模式)
- java学习笔记-设计模式20(备忘录模式)
- java学习笔记-设计模式19(命令模式)