二つの秩序チェーンが一つの秩序チェーンに結合されています.
17170 ワード
なんで面接の時に剥がせないですか?!!o(╥╥)o構想:2つのチェーンの最初の数を比較して、小さいものを新しいチェーンに追加して、その後、ポインタを後ろに移動して、2番目の数をもう一つのチェーンの最初の数と比較して、これに類推します.そのチェーンの数が新しいリストに追加されて、そのチェーンの針が後ろに移動します.
/*
{
value:1,
next:{...}
}
*/
//
function merge(p1,p2){
let next={};//
let result=next; //
while(p1!=null&&p2!=null){
let newNode={value:null,next:null}; //
let a=p1.value;
let b=p2.value;
if(a<b){
next.next=newNode; //
newNode.value=a;
next=newNode; //
p1=p1.next;
}else{
next.next=newNode;
newNode.value=b;
next=newNode;
p2=p2.next;
}
}
// ,
if(p2!=null){
while(p2!=null){
let newNode={value:null,next:null};
next.next=newNode;
newNode.value=p2.value;
next=newNode;
p2=p2.next;
}
}
if(p1!=null){
while(p1!=null){
let newNode={value:null,next:null};
next.next=newNode;
newNode.value=p1.value;
next=newNode;
p1=p1.next;
}
}
return result.next;
}
//
function print(p){
let arr=[];
while(p!=null){
arr.push(p.value);
p=p.next;
}
return arr.join('');
}
//
let p1={
value:1,
next:{
value:2,
next:{
value:5,
next:null
}
}
}
let p2={
value:3,
next:{
value:4,
next:{
value:7,
next:{
value:9,
next:null
}
}
}
}
let p=merge(p1,p2);
console.log(print(p));//1234579
昇華版 function ListNode(val) {
this.val = val;
this.next = null;
}
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var mergeTwoLists = function(l1, l2) {
let curr=new ListNode(null);
let h=curr;
while(l1!=null||l2!=null){
if(l1==null&&l2!=null){
curr.next=new ListNode(l2.val);
curr=curr.next;
l2=l2.next;
}else if(l2==null&&l1!=null){
curr.next=new ListNode(l1.val);
curr=curr.next;
l1=l1.next;
}else{
if(l2.val<=l1.val){
curr.next=new ListNode(l2.val);
curr=curr.next;
l2=l2.next;
}else{
curr.next=new ListNode(l1.val);
curr=curr.next;
l1=l1.next;
}
}
}
return h.next;
};