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

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

common color -c span lis class 指向 node 一個

題目

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

分析

  首先分別遍歷list1和list2,得到兩個鏈表的長度count1和count2,同時,判斷兩個鏈表的尾指針是否相同,如果不同,說明兩個鏈表不存在公共結點;如果相同,則繼續......。比較count1和count2,如果count1>count2,讓指針n1向前移動count1-count2;否則讓指針n2向前移動count2-count1。最後,兩個指針同時向前移動,直到兩個指針指向的結點相同,並返回。

代碼

 1   public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2){
2 int count1 = 0, count2 = 0; 3 ListNode node1 = pHead1, node2 = pHead2; 4 while(node1!=null){ 5 count1++; 6 node1 = node1.next; 7 } 8 while(node2!=null){ 9 count2++; 10 node2 = node2.next; 11 } 12 if
(node1!=node2) 13 return null; 14 ListNode n1 = pHead1, n2 = pHead2; 15 if(count1>count2){ 16 for(int i=0;i<count1-count2;i++){ 17 n1 = n1.next; 18 } 19 } 20 else{ 21 for(int i=0;i<count2-count1;i++){
22 n2 = n2.next; 23 } 24 } 25 while(n1!=n2){ 26 n1 = n1.next; 27 n2 = n2.next; 28 } 29 return n1; 30 }

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