题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
分析
首先考虑两个链表的头部哪个成为新链表的头,显然是值小的那个是新的头;
然后是合并时,两个链表上分别有一个指针cur1和cur2,比较两个指针指向的节点值大小,较小的链接到新链表的尾部,且指针往后移动一个,较大的则不动;
可能有某个链表未遍历完,直接将其全添加到新链表尾部即可。
代码实现
/*function ListNode(x){
this.val = x;
this.next = null;
}*/
function Merge(h1, h2)
{
if(h1 === null && h2 === null)
return;
if(h1 === null)
return h2;
if(h2 === null)
return h1;
var newH = null, cur1 = null, cur2 = null, newE = null;
if(h1.val < h2.val){
newH = h1;
cur1 = h1.next;
cur2 = h2;
}
else{
newH = h2;
cur1 = h1;
cur2 = h2.next;
}
newE = newH;
while (cur1 !== null && cur2 !== null) {
if(cur1.val < cur2.val){
newE.next = cur1;
cur1 = cur1.next;
}else{
newE.next = cur2;
cur2 = cur2.next;
}
newE = newE.next;
}
while(cur1 !== null){
newE.next = cur1;
cur1 = cur1.next;
}
while(cur2 !== null){
newE.next = cur2;
cur2 = cur2.next;
}
return newH;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。