【LeetCode】——相交鏈表

相交鏈表

【題目】

找到兩個鏈表相交的起始點

【思路】

如果兩個鏈表無環相交,那麼從相交節點開始,一直到兩個鏈表終止的這一段,是兩個鏈表共享的。

  • 鏈表1從頭節點開始,走到最後一個節點,統計鏈表1的長度記爲len1,同時記錄鏈表1的最後一個節點記爲end1
  • 鏈表2從頭節點開始,走到最後一個節點,統計鏈表2的長度記爲len2,同時記錄鏈表2的最後一個節點記爲end2
  • 此時如果cur1 != cur2,說明兩個鏈表不相交,返回null即可;如果cur1 == cur2,說明兩個鏈表有交點,進入下一步來尋找第一個交點
  • 如果鏈表1比較長,鏈表1就先走len1-len2步瞭如果鏈表2比較長,鏈表2就先走len2-len1步。然後兩個鏈表一起走,一起走的過程中,兩個鏈表第一次走到一起的那個節點就是第一個相交的節點

【代碼】


public ListNode getIntersetionNode(ListNode head1,ListNode head2){
    if(head1 == null || head2 == null){
        return null;
    }
    ListNode cur1 = head1;
    ListNode cur2 = head2;
    int n = 0;
    while(cur1.next != null){
        n++;
        cur1 = cur1.next;
    }
    while(cur2.next != null){
        n--;
        cur2 = cur2.next;
    }
    if(cur1 != cur2){
        return null;
    }
    cur1 = n > 0 ? head1 : head2;
    cur2 = cur1 == head1 ? head2 : head1;
    n = Math.abs(n);
    while(n != 0){
        n--;
        cur1 = cur1.next;
    }
    while(cur1 != cur2){
        cur1 = cur1.next;
        cur2 = cur2.next
    }
    return cur1;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章