2つの昇順チェーンテーブルを新しい昇順チェーンテーブルに結合して返します(BAT面接問題)

5272 ワード

一、テーマ及び例
2つの昇順チェーンテーブルを新しい昇順チェーンテーブルに結合して返します.新しいチェーンテーブルは、指定された2つのチェーンテーブルのすべてのノードを接合することによって構成されます.
例:入力:1->2->4、1->3->4出力:1->1->2->3->4->4
二、解決構想1、1つの傀儡ノードを頭ノードとして定義し、もう1つをノードとし、尾挿2を使用し、チェーンテーブルl 1、l 2の中の小さい要素を循環挿入し、1つのチェーンテーブルが空であるまで循環する.最後に長いチェーンテーブルを新しいチェーンテーブルの末尾に直接リンクすればいいです.
三、コード実装

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1 == null) {
        // l1   ,        l2
        return l2;
        }
        if (l2 == null) { //l2  ,      l1
        return l1;
        }
        ListNode newHead = new ListNode(-1);   //         (    )
        ListNode newTail = newHead;  //       
        ListNode cur1 = l1; //          l1
        ListNode cur2 = l2; //          l2
        while (cur1 != null && cur2 != null) {  //             
        if (cur1.val < cur2.val) {
        //   cur1               
        //            , newTail   null    null    .
        newTail.next = cur1;
        newTail = newTail.next;
        cur1 = cur1.next;
        } else {
        newTail.next = cur2;
        newTail = newTail.next;
        cur2 = cur2.next;
        }
        }
        //       ,       cur1   cur2             .
        //                           
        if (cur1 == null) {
        newTail.next = cur2;
        } else {
        newTail.next = cur1;
        }
        return newHead.next;
        }