前言
仅记录学习笔记,如有错误欢迎指正。
题目
输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。示例
- 输入: {1,2,3,6,7},{2,3,4,6,7}
- 输出: 6
解法
找出2个链表的长度,然后让长的先走两个链表的长度差,然后再一起走(因为2个链表用公共的尾部)
int m = 0;
int n = 0;
ListNode p1 = pHead1;
ListNode p2 = pHead2;
if(p1 == null || p2 == null){
return null;
}
while(p1.next!=null){
m++;
p1 = p1.next;
}
while(p2.next!=null){
n++;
p2 = p2.next;
}
if(m>n){
pHead1 = walkStep(pHead1,m - n);
}else{
pHead2 = walkStep(pHead2,n - m);
}
while(pHead1 != null){
if(pHead1 == pHead2) return pHead1;
pHead1 = pHead1.next;
pHead2 = pHead2.next;
}
return null;
}
public ListNode walkStep(ListNode pHead1, int step){
while(step-- !=0){
pHead1 = pHead1.next;
}
return pHead1;
}