输入两个链表,找出它们的第一个公共结点。
思路:分别计算两个链表的长度,然后可以区分哪个链表更长,并且求出俩链表的长度差delta。然后先遍历长链表,让长链表先走delta步,接下来,两个链表同时遍历,直到两个引用指向同一个对象,返回该节点。
/* 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; } if(pHead1==pHead2){ return pHead1; } int count1=0,count2=0; for(ListNode node=pHead1;node!=null;node=node.next){ count1++; } for(ListNode node=pHead2;node!=null;node=node.next){ count2++; } ListNode longHead=null,shortHead=null; if(count1>=count2){ longHead=pHead1;shortHead=pHead2; }else{ longHead=pHead2;shortHead=pHead1; } int delta=Math.abs(count1-count2); int i=0;ListNode node=null,nodeS=shortHead; for(node=longHead;i<delta&&node!=null;node=node.next,i++); while(node!=null&&nodeS!=null){ if(node==nodeS){ return node; } node=node.next; nodeS=nodeS.next; } return null; } }