/*题目 * 输入两个链表,找出他们的第一个公共节点 * */ /*思路 * 1.使用哈希表,将一个链表储存进去,再遍历另一个链表,与哈希表对比 * 2.求出两个链表的长度,然后长的链表把多出节点个数先走掉,两个链表在同时开始走 * 时间复杂度为 O(m + n),空间复杂度为O(1) * * 下面这个编码就是这个原理,但是代码较难理解,看图示 一步一步就理解了 * */
public class offer37_two {
class ListNode{
int val;
ListNode next=null;
public ListNode(){ }
public ListNode(int val){
this.val=val;
}
}
public ListNode FindFirstCommonNode (ListNode pHead1, ListNode pHead2){
ListNode p1 = pHead1;
ListNode p2 = pHead2;
while(p1 != p2 ){
p1 = (p1 != null ? p1.next : pHead2);
p2 = (p2 != null ? p2.next : pHead1);
}
return p1;
}
}
加油,给自己加油!!!