题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
分析
首先考虑两个链表的头部哪个成为新链表的头,显然是值小的那个是新的头;
然后是合并时,两个链表上分别有一个指针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; }