大家好,我是Ryan,本篇来记录一个链表经典问题:寻找第一个公共子节点
链表定义
class ListNode {
public int val;
public ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
可以先从拼接两个链表开始入手,这样总长度就相同了。
例如:链表A,B,分别拼成AB和BA,这样最后的公共节点就是公共部分
public ListNode findFirstCommonNode(ListNode pHead1, ListNode pHead2) {
if(pHead1==null || pHead2==null){
return null;
}
ListNode p1=pHead1;
ListNode p2=pHead2;
while(p1!=p2){
p1=p1.next;
p2=p2.next;
if(p1!=p2){
//一个链表访问完了就跳到另外一个链表继续访问
if(p1==null){
p1=pHead2;
}
if(p2==null){
p2=pHead1;
}
}
}
return p1;
}