輸入兩個鏈表,找出它們的第一個公共結點。
IDEA
public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}鏈表是單鏈表, 如果倆個鏈表有相同的節點,則該節點后,這兩個鏈表重合,故拓撲結構是Y型。處理的辦法是先計算兩個鏈表的長度,讓較長的鏈表先走到與另一鏈表一樣產度,然后同時移動,比較兩個鏈表,找出首次比較相同的那一個
CODE
public class Solution { public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { if(pHead1==null||pHead2==null){ return null; } int len1=getLength(pHead1); int len2=getLength(pHead2); ListNode p1=pHead1; ListNode p2=pHead2; if(len1>len2){ int len=len1-len2; while(len>0){ p1=p1.next; len--; } }else{ int len=len2-len1; while(len>0){ p2=p2.next; len--; } } while(p1!=p2){ p1=p1.next; p2=p2.next; } return p1; } public static int getLength(ListNode pHead){ int len=0; ListNode p=pHead; while(p!=null){ len++; p=p.next; } return len; }}這是不用計算長度的一個巧妙的辦法
public class Solution { public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { ListNode p1=pHead1, p2=pHead2; while(p1!=p2){ p1=(p1==null?pHead2:p1.next); p2=(p2==null?pHead1:p2.next); } return p1; }}
新聞熱點
疑難解答