2つの順序付きリストをマージする[電源ボタン]

2は、新たなソートされたリストとリターンにリストを命じました。新しいリストは、二つのリストで構成与えられたモザイク内のすべてのノードです。

バックル試験からの力の主題

入力:1-> 2-> 4、1-> 3-> 4
出力:1-> 1-> 2-> 3-> 4-> 4

思考

新しいリストの確立、アップ書かれたコードの新しいノード人形リストを選択するには、ヘッドノードと簡単です。
新しいリストは、エンドノードは、新しいリスト内の尾部を挿入するために使用されるノードに、エンドノードに設けられています。
リストL1およびL2リストをループは、新しいリストのテールに対応するループを終了し、その後、端に連結されたリストL1またはL2リストをトラバース周期の終わりのサイズを決定するために添加されます。
リストが完了していないトラバースを決定し、何の完全なトラバーサルはありませんノードの残りの部分は、新しいリストの最後に追加されて一緒に入れ。

コード
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if(l1==null){
            return l2;
        }
        if(l2==null){
            return l1;
        }
        //设置一个傀儡节点
        ListNode newHead=new ListNode(-1);
        //cur1和cur2分别遍历l1和l2链表
        ListNode cur1=l1;
        ListNode cur2=l2;
        //新链表的尾部
        ListNode newtail=newHead;
        while(cur1!=null&&cur2!=null){
             if(cur1.val<=cur2.val){
                newtail.next=cur1;
                 cur1=cur1.next;
             }else{
                newtail.next=cur2;
                 cur2=cur2.next;
             }
             newtail=newtail.next;  
        }
        //哪个不为空,就把哪个链表剩下的所有节点尾插到新链表结尾
        if(cur1!=null){
            newtail.next=cur1;
        }
        if(cur2!=null){
            newtail.next=cur2;
        }
       return newHead.next;
    }
}
公開された24元の記事 ウォン称賛46 ビュー3339

おすすめ

転載: blog.csdn.net/qq_45619426/article/details/104542316