LeetCode合并两个有序链表
//合并两个有序链表
/**
* 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;}
int count=0;
struct ListNode* tmp=l1;
struct ListNode* tmp2=l2;
//统计两链表结点个数之和
while(tmp){
if(tmp!=NULL)
count++;
tmp=tmp->next;
}
while(tmp2){
if(tmp2!=NULL)
count++;
tmp2=tmp2->next;
}
//开辟空间
struct ListNode* newtail=(struct ListNode*)malloc((count+1)*sizeof(struct ListNode*));
struct ListNode* newhead=l1;
//创建新的头结点
if(l1->val<l2->val){
newhead=l1;
}else{
newhead=l2;
}
while(l1&&l2){
//谁小尾结点就先链谁
if(l1->val<l2->val){
newtail->next=l1;
l1=l1->next;
}else{
newtail->next=l2;
l2=l2->next;
}
newtail=newtail->next;
}
//当一个链表链接完之后,链接另一个链表的剩余元素
if(l1==NULL){
newtail->next=l2;
}else{
newtail->next=l1;
}
return newhead;
}