题目描述
输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)
解题思路
这题我们找到两个链表的公共结点,如果两个链表有公共结点,则这个结点和后面的结点都是相同的,而且两个结点相同不是光值相同,而且结点后面的next也是相同的。
题目链接.
我们可以把两个链表定位到相同长度的部分,长的链表先往后面定位,然后两个链表都同时做p=p.next操作就可以定位到结点,当p1==p2就可以返回结点。
代码块
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
ListNode p1=pHead1;
ListNode p2=pHead2;
int len1=0,len2=0;
while(p1!=null){
p1=p1.next;
len1++;
}
while(p2!=null){
p2=p2.next;
len2++;
}
p1=pHead1;
p2=pHead2;
if(len1>len2){
for (int i = 0; i < len1-len2; i++) {
p1=p1.next;
}
}else{
for (int i = 0; i < len2-len1; i++) {
p2=p2.next;
}
}
while(p1!=null){
if(p1==p2){
return p1;
}
p1=p1.next;
p2=p2.next;
}
return null;
}
}