题目:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有结点组成的
例:1->2->4, 1->3->4
output: 1->1->2->3->4->4
题解(一):递归法,每递归一次,确定一个节点,该节点是两个链表当前第一个节点节点数较小的那一个。
Number* combine(Number* pr1, Number* pr2)
{
if (pr1 == NULL) return pr2;
else if (pr2 == NULL)return pr1;
else if (pr1->num < pr2->num) { pr1->next = combine(pr1->next, pr2);return pr1; }
else { pr2->next = combine(pr1, pr2->next); return pr2; }
}
题解(二):迭代法,创造一个空新链表头,定义一个指针指向新链表头move,再定义两个指针node1、node2分别指向两个旧链表头,新链表头的next指针指向node1.val中和node2.val中较小的一个,然后move指针向前移动一格,指向被插入元素的指针也向后移动一格,在继续重复上述比较操作,直到有一个链表的遍历指针为null,在让move.next指向另一个链表被指针所指向的节点。
Number* combine(Number* pr1, Number*pr2)
{
Number*start = new Number,* front;
front = start;
while (pr1!=NULL&&pr2!=NULL)
{
if (pr1->num < pr2->num)
{
front->next = pr1;
pr1 = pr1->next;
}
else {
front->next = pr2;
pr2 = pr2->next;
}
front = front->next;
}
front->next = pr1 == NULL ? pr2 : pr1;
return start ;
}