知识点/数组:链表
题目描述
输入两个链表,找出它们的第一个公共结点。
思路:
蛮力法:在第一个链表遍历每个节点,每遍历到一个节点,就在第二个链表上遍历每个节点。如果在第二个链表上有一个节点和第二链表上的节点一样,则说明两个链表在这个节点上重合,于是找到了他们的公共节点。时间复杂度:O(m*n);
观察如果两个链表有重复的节点,那么公共节点出现在链表的尾部。如果我们从两个链表的尾部开始比较,那么最后一个相同的节点就是我么你要找的节点。
/*
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;}
int count1=0;
ListNode p1= pHead1;
while(p1!=null){
p1=p1.next;
count1++;
}
int count2=0;
ListNode p2= pHead2;
while(p2!=null){
p2=p2.next;
count2++;
}
int result=count1-count2;
if(result>0){
while(result>0){
pHead1=pHead1.next;
result--;
}
while(pHead1!=pHead2){
pHead1=pHead1.next;
pHead2=pHead2.next;
}
return pHead1;
}
if(result<=0){
while(result<0){
pHead2=pHead2.next;
result++;
}
while(pHead1!=pHead2){
pHead1=pHead1.next;
pHead2=pHead2.next;
}
return pHead1;
}
return null;
}
}