链表-合并有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
if(l1==NULL) //此判断用于解决有空列表的情况
return l2;
if(l2==NULL)
return l1;
struct ListNode *head,*headindicator;
if(l1->val >= l2->val){
//此判断用于确定新列表的第一个结点
head = l2;
l2 = l2->next;
}
else{
head = l1;
l1 = l1->next;
}
headindicator = head;
while(l1&&l2){
//while循环用于排序
if(l1->val <= l2->val){
head->next = l1;
head = head->next;
l1 = l1->next;
}
else{
head->next = l2;
head = head->next;
l2 = l2->next;
}
}
if(l1==NULL){
//如果两个链表有一个提前结束了,就将另一个链表剩下的结点直接接到新链表的后面
head->next = l2;
}
if(l2==NULL){
head->next = l1;
}
return headindicator;
}