160. 相交鏈表

編寫一個程序,找到兩個單鏈表相交的起始節(jié)點。
輸入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
輸出:Reference of the node with value = 8
輸入解釋:相交節(jié)點的值為 8 (注意,如果兩個列表相交則不能為 0)。從各自的表頭開始算起,鏈表 A 為 [4,1,8,4,5],鏈表 B 為 [5,0,1,8,4,5]。在 A 中,相交節(jié)點前有 2 個節(jié)點;在 B 中,相交節(jié)點前有 3 個節(jié)點。

注意:
如果兩個鏈表沒有交點,返回 null.
在返回結(jié)果后,兩個鏈表仍須保持原有的結(jié)構(gòu)。
可假定整個鏈表結(jié)構(gòu)中沒有循環(huán)。
程序盡量滿足 O(n) 時間復(fù)雜度,且僅用 O(1) 內(nèi)存。

題解:題目意思不難理解,關(guān)鍵就在于

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
   public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        if(headA == null)
            return null;
        if(headB == null)
            return null;
       if(headA == headB)
           return headA;
        int lenA = 0,lenB = 0;
        ListNode nodeA = headA;
        ListNode nodeB = headB;
        while (nodeA != null){
            lenA++;
            nodeA = nodeA.next;
        }
        while (nodeB != null){
            lenB++;
            nodeB = nodeB.next;
        }
         nodeA = headA;
        nodeB = headB;
        if(lenA > lenB){
            int len = lenA - lenB;
            while (len>0){
                len--;
                nodeA = nodeA.next;
            }
        }
        else if(lenA < lenB){
            int len = lenB - lenA;
            while (len>0){
                len--;
                nodeB = nodeB.next;
            }
        }
        while (nodeA != null){
            if(nodeA == nodeB)
                return nodeA;
            nodeA = nodeA.next;
            nodeB = nodeB.next;
        }
        return null;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.題目描述 編寫一個程序,找到兩個單鏈表相交的起始節(jié)點。 如下面的兩個鏈表:在節(jié)點 c1 開始相交。 示例 1:...
    Jayce_xi閱讀 747評論 0 0
  • 題目 編寫一個程序,找到兩個單鏈表相交的起始節(jié)點。 如下面的兩個鏈表: 在節(jié)點 c1 開始相交。 示例 1: 輸入...
    FesonX閱讀 552評論 0 0
  • 題目 難度:★★☆☆☆類型:鏈表 編寫一個程序,找到兩個單鏈表相交的起始節(jié)點。 如下面的兩個鏈表: 在節(jié)點 c1 ...
    玖月晴閱讀 1,545評論 0 1
  • 編寫一個程序,找到兩個單鏈表相交的起始節(jié)點。 如下面的兩個鏈表: 在節(jié)點 c1 開始相交。 示例 1: 輸入:in...
    薄荷糖的味道_fb40閱讀 230評論 0 0
  • 題目 編寫一個程序,找到兩個單鏈表相交的起始節(jié)點。 如下面的兩個鏈表: 在節(jié)點 c1 開始相交。 示例 1: 輸入...
    禾木清清閱讀 190評論 0 0

友情鏈接更多精彩內(nèi)容