劍指Offer-連結串列-(6)
阿新 • • 發佈:2018-12-08
知識點/陣列:連結串列
題目描述
輸入兩個連結串列,找出它們的第一個公共結點。
思路:
蠻力法:在第一個連結串列遍歷每個節點,每遍歷到一個節點,就在第二個連結串列上遍歷每個節點。如果在第二個連結串列上有一個節點和第二連結串列上的節點一樣,則說明兩個連結串列在這個節點上重合,於是找到了他們的公共節點。時間複雜度: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; } }