您的位置:首页 > 其它

【leetcode】Intersection of Two Linked Lists

2014-12-29 16:42 417 查看
问题描述:
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
*/


思路:

计算A的长度:B的长度;
若A==B,直接从头开始比较值,相同返回,不同A/B同时next;
若A!=B,计算差值dif,让长的先next dif个长度,在开始逐个比较两个值。相同返回,不同同时next;


附Java代码,已过Leetcode~

public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if(headA==null || headB==null)
return null;
int common=0;
int dif = 0;
int flag=0;
ListNode tempA=headA;
ListNode tempB=headB;
//A的长度
while(tempA!=null || tempB!=null){
if(tempA!=null && tempB!=null){
tempA=tempA.next;
tempB=tempB.next;
common++;
}
if(tempA==null && tempB!=null){
flag=1;
tempB=tempB.next;
dif++;
}
if(tempB==null && tempA!=null){
flag=2;
tempA=tempA.next;
dif++;
}
}
tempA=headA;
tempB=headB;
if(flag==1){
while(dif>0){
dif--;
tempB=tempB.next;
}
}else if(flag ==2){
while(dif>0){
dif--;
tempA=tempA.next;
}
}
//进行比较
while(common-->0){
if(tempA.val==tempB.val)
return tempA;
else{
tempA=tempA.next;
tempB=tempB.next;
}
}
return null;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: