题目
题号:36
题目名:两个链表的第一个公共结点
编程语言
Java
题目描述
输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)
初次思路
他们两个链表一定有公共交点
无论长短,先把他们两的起始位置到终点长度变为一致
然后两个链表再出发,这样如果遍历到两个节点相等,说明首次相遇,那第一个相交节点就找到了
解题代码
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
/*
如果给两个指针指向两个链表,他们速度一样,如果一个到达终点,就会有一段差距
这个差距给长那那一方
找到多出来的部分,给长的消减掉,然后两条链表一起出发,走到一起就是焦点
*/
ListNode curr1 = pHead1;
ListNode curr2 = pHead2;
while (curr1!=null&&curr2!=null) {
curr1 = curr1.next;//向后遍历
curr2 = curr2.next;
}
//如果链表1遍历到空了
if(curr1==null) {
//将链表2遍历到和链表1同步位置
while(curr2!=null) {
curr2=curr2.next;
pHead2 =pHead2.next;
}
}else {
//将链表1遍历到和链表2同步位置
while(curr1!=null) {
curr1=curr1.next;
pHead1 =pHead1.next;
}
}
while(pHead1!=pHead2) {
pHead1=pHead1.next;
pHead2=pHead2.next;
}
return pHead1;
}
}
算法练习代码我都开源在码云上,有需要的朋友可以看看