题目描述
输入两个链表,找出它们的第一个公共结点。
思路1:
首次遍历:算出2个链表的长度l1,l2。
第二次遍历,长的链表先走|l2-l1|步,然后2个链表同时遍历,找到第一个相同的节点输出。
1 public class Solution { 2 public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { 3 int l1 = 0,l2 = 0,ldiff=0; 4 ListNode longp,shortp; 5 6 // 得到长度 7 for(ListNode p = pHead1;p!=null;p=p.next) 8 l1++; 9 for(ListNode p = pHead2;p!=null;p=p.next) 10 l2++; 11 if(l1>l2){ 12 ldiff = l1-l2; 13 longp=pHead1;shortp = pHead2; 14 } 15 else{ 16 ldiff = l2-l1; 17 longp=pHead2;shortp = pHead1; 18 } 19 //长链表先走 20 for(int i = 0;i<ldiff;i++){ 21 longp = longp.next; 22 } 23 //2个链表同时遍历 24 while(longp!=null){ 25 if(longp.val==shortp.val) return longp; 26 longp = longp.next; 27 shortp = shortp.next; 28 29 } 30 return null; 31 } 32 }