将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
解题思路:
先挨个比较两个链表的首元素,取其中的较小值接入链表,将该较小值所在链表指向该较小值的下一个值,以此类推直到两个链表中的每一条完全接入新链表,再把另一条链表直接接到新链表的最后面即可。
C++代码如下:
/**
- Definition for singly-linked list.
- struct ListNode {
-
int val;
-
ListNode *next;
-
ListNode(int x) : val(x), next(NULL) {}
- };
/
class Solution {
public:
ListNode mergeTwoLists(ListNode* l1, ListNode* l2)
{
ListNode* h=NULL,*p=NULL;
while(l1&&l2)
{
if(l1->valval)
{
p?p->next=l1,p=p->next:p=h=l1;
l1=l1->next;
}
else
{
p?p->next=l2,p=p->next:p=h=l2;
l2=l2->next;
}
}
if(l1)
p?p->next=l1:p=h=l1;
else
p?p->next=l2:p=h=l2;
return h;
}
};