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;
}
}