まず、対象の説明:
2は、新たなソートされたリストとリターンにリストを命じました。新しいリストは、二つのリストで構成与えられたモザイク内のすべてのノードです。
例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/merge-two-sorted-lists
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。
第二に、問題解決のアイデア:
1、特殊なケース:L1 L2、空のリストを返すL2でL1空のリストを返す。
2、新しいリストを作成します。L1の値が小さい場合はL1とL2の値は、比較され、新しいリンクリストへのL1プットの値、そうでない場合、新しいリストにL2の値。
図3は、長さL1およびL2リストを考える必要があります。CUR1がnullの場合、whileループ後、CUR2がnullでない場合、結果リストは、リンクされた直接CUR2新しいノードがリストの最後に挿入されソートされ、新しいノードにリストCUR1のそうでなければ終了。
第三に、コード説明:
/**
* 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) {
// l1 为空, 最终结果就是 l2
if(l1==null){
return l2;
}
if(l2==null){
return l1;
}
ListNode newHead=new ListNode(-1);
ListNode newTail=newHead;
ListNode cur1=l1;
ListNode cur2=l2;
while(cur1!=null&&cur2!=null){
if(cur1.val<cur2.val){
newTail.next=new ListNode(cur1.val);
newTail=newTail.next;
cur1=cur1.next;
}
else{
newTail.next=new ListNode(cur2.val);
newTail=newTail.next;
cur2=cur2.next;
}
}
//while循环结束后,cur1和cur2有一个到达链表末尾,
//把没到末尾的链表剩下的元素插入到新链表尾节点中
if(cur1==null){
newTail.next=cur2;
}
if(cur2==null){
newTail.next=cur1;
}
return newHead.next;
}
}