1、第一种方法用栈,但是需要辅助空间
2、第二种方法先遍历两个链表求出长度,让一个指针先走长度差的步数,另一个指针再走,相遇即第一个公共结点
/*
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 p1=pHead1;
ListNode p2=pHead2;
int count1=0;
int count2=0;
while(p1!=null)
{
count1++;
p1=p1.next;
}
while(p2!=null)
{
count2++;
p2=p2.next;
}
p1=pHead1;
p2=pHead2;
if(count2>count1)
{
while((count2-count1) !=0)
{
p2=p2.next;
count2--;
}
while(p2!=p1)
{
p2=p2.next;
p1=p1.next;
}
}
else{
while((count1-count2) !=0)
{
p1=p1.next;
count1--;
}
while(p2!=p1)
{
p2=p2.next;
p1=p1.next;
}
}
return p2;
}
}