1. 程式人生 > >36兩個鏈表的第一個公共結點

36兩個鏈表的第一個公共結點

兩個 一個 ++ 長度 common tno 描述 得到 二次

題目描述

輸入兩個鏈表,找出它們的第一個公共結點。

思路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 }

36兩個鏈表的第一個公共結點