题目
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的
示例 2:
输入:l1 = [], l2 = []
输出:[]
示例 3:
输入:l1 = [], l2 = [0]
输出:[0]
提示:
1. 两个链表的节点数目范围是 [0, 50]
2. -100 <= Node.val <= 100
3. l1 和 l2 均按 非递减顺序 排列
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
struct ListNode *h,*p;
h=(struct ListNode *)malloc(sizeof(struct ListNode));
h->val=-1;
h->next=NULL;
p=h; //保证要返回的新链表的头结点地址不丢失
while(l1!=NULL&&l2!=NULL)
{
if(l1->val <= l2->val) //l1当前结点小于l2的,将l1当前结点接到新链表h后
{
p->next=l1;
l1=l1->next;
}
else //l2当前结点小于l1的,将l2当前结点接到新链表h后
{
p->next=l2;
l2=l2->next;
}
p=p->next;
}
//将可能存在的没有循环到最后的链表接在新链表最后,没有到头的剩下的链表元素都比新链表的大,
p->next= l1==NULL ? l2:l1;
return h->next;
}