题目的链接在这里:https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46
- 题目大意
- 一、示意图
- 二、解题思路
- 正常情况
题目大意 输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)
一、示意图 二、解题思路
正常情况正常情况
代码如下:
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
//判断两个链表的第一个公共结点
if(pHead1==null||pHead2==null)
return null;
//第一种暴力的方法就是直接统计这两个的长度 然后在通过长度差来判断
ListNode temp1=pHead1;
ListNode temp2=pHead2;
int len1=0;
int len2=0;
while (temp1!=null){
len1++;
temp1=temp1.next;
}
while (temp2!=null){
len2++;
temp2=temp2.next;
}
//然后进行判断两者的差值
int count=Math.abs(len1-len2);
if(len1>=len2){
//说明pHead1比较长
//先减去多余长度
while (count>0){
pHead1=pHead1.next;
count--;
}
//然后到了一样的位置开始比较了
while (pHead1!=null&&pHead2!=null){
if(pHead1.val==pHead2.val){
//说明到了
return pHead1;
}
else{
//不然都向后走一个
pHead1=pHead1.next;
pHead2=pHead2.next;
}
}
}
if(len2>len1){
//说明pHead1比较长
//先减去多余长度
while (count>0){
pHead2=pHead2.next;
count--;
}
//然后到最新的位置了
while (pHead1!=null&&pHead2!=null){
if(pHead1.val==pHead2.val){
//说明到了
return pHead2;
}
else{
//不然都向后走一个
pHead1=pHead1.next;
pHead2=pHead2.next;
}
}
}
return null;
}
}


![java 剑指offer之[数据结构 简单]JZ36 两个链表的第一个公共结点 java 剑指offer之[数据结构 简单]JZ36 两个链表的第一个公共结点](http://www.mshxw.com/aiimages/31/285408.png)
