题目描述
输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)
解析:解这一题,首先要明白什么是公共节点,自己第一次写,把公共节点当成了节点值相等,AC不通,这里的公共节点指的是指针指向同一个节点,(原本是并排的两条线,突然合二为一了)
节点相等,节点值一定相等,节点值相等,节点不一定相等,有公共节点,代表,两个链表共用一个节点
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
if(pHead1==null ||pHead2==null)return null;
ListNode h1=pHead1;
ListNode h2=pHead2;
while(h1!=h2){
h1=h1.next;
h2=h2.next;
if(h1!=h2){
if(h1==null)h1=pHead2;
if(h2==null)h2=pHead1;
}
//这里的意思是当指针指到表尾时,再往下指另外一个链表的表头,两个链表都是这样,当有公共节点的时候,他们肯定在某处节点相等。不懂的可以画两条并排的链表,然后另外一条再画在本条的末尾,我用箭头演示一下,大家可以再带入数据进去,一看就懂。
// ------->---->
// ---->------->
}
return h1;
}
}