文章目录
题目
代码
总结
题目
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]
示例 2:
输入:l1 = [], l2 = [] 输出:[]
示例 3:
输入:l1 = [], l2 = [0] 输出:[0]
提示:
- 两个链表的节点数目范围是
[0, 50]
-100 <= Node.val <= 100
l1
和l2
均按 非递减顺序 排列
代码
LeetCode上的list1,list2是头指针,其val值有效,函数是:
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{
if(list1==NULL)
return list2;
if(list2==NULL)
return list1;
struct ListNode*ins1=list1,*ins2=list2;
if(list1->val>list2->val)
{
ins1=list2;
ins2=list1;
}
while(ins1->next!=NULL&&ins2!=NULL)
{
if(ins1->next->val<ins2->val)
{
ins1=ins1->next;
}
else if(ins1->next->val>=ins2->val)
{
struct ListNode*temp=ins2->next;//存储此时的ins->next,以继续遍历
ins2->next=ins1->next;
ins1->next=ins2;
ins2=temp;
}
}
if(ins1->next==NULL)
ins1->next=ins2;
if(list1->val>list2->val)
{
return list2;
}
else return list1;
}
若list1,list2是头结点,则下面是完整代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct ListNode {
int val;
struct ListNode *next;
}Node;
void Creat(struct ListNode** head);
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2);
int main()
{
int n1,n2;
Node*list1,*list2;
Creat(&list1);
Creat(&list2);
Node*list3=mergeTwoLists(list1,list2);
list3=list3->next;
while(list3!=NULL)
{
printf("%d ",list3->val);
list3=list3->next;
}
return 0;
}
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)//注意LeetCode的list1是头指针,有val值
{
if(list1==NULL)
return list2;
if(list2==NULL)
return list1;
struct ListNode*ins1=list1,*ins2=list2->next;
while(ins1->next!=NULL&&ins2!=NULL)
{
if(ins1->next->val<ins2->val)
{
ins1=ins1->next;
}
else if(ins1->next->val>=ins2->val)
{
struct ListNode*temp=ins2->next;//存储此时的ins->next,以继续遍历
ins2->next=ins1->next;
ins1->next=ins2;
ins2=temp;
}
}
if(ins1->next==NULL)
ins1->next=ins2;
return list1;
}
void Creat(struct ListNode** head)
{
*head=(Node*)malloc(sizeof(Node));
int n;
(*head)->next=NULL;
scanf("%d",&n);
Node*end,*ins;
end=*head;
for(int i=0;i<n;i++)
{
ins=(Node*)malloc(sizeof(Node));
int a;
scanf("%d",&a);
ins->val=a;
ins->next=NULL;
end->next=ins;
end=ins;
}
}
总结
以上就是今天要讲的内容,这一题还是比较简单的,可能会遇到编写上的错误,思路容易想到。