概述
题目:将2个升序链表合并成为一个升序链表
输出结果为:1,1,2,3,4,4
我的思路为链表1和链表2的值分别比较,然后把小的值给新创建的节点,最后返回需要指向哨兵卫节点的下一个。
代码为:
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
if(list1==NULL&&list2==NULL)
{
return NULL;
}
struct ListNode* plist1=list1;
struct ListNode* plist2=list2;
//创建带哨兵卫的节点,这样插入比较方便
struct ListNode* newlist=(struct ListNode*)malloc(sizeof(struct ListNode));
newlist->next=NULL;
struct ListNode* cur=newlist;
while(plist1&&plist2)
{
if(plist1->val<=plist2->val)
{
cur->next=plist1;
plist1=plist1->next;
}
else
{
cur->next=plist2;
plist2=plist2->next;
}
cur=cur->next;
}
//这里判断原链表有没有剩下的节点,如果有直接把他们连接给newlist节点
if(plist1)
{
cur->next=plist1;
}
else
{
cur->next=plist2;
}
//这里需要free掉哨兵卫的节点,防止内存泄露
struct ListNode* copynewlist=newlist->next;
free(newlist);
return copynewlist;
}
最后
以上就是美丽钻石为你收集整理的【超详细】c语言实现合并两个有序链表 leetcode21题的全部内容,希望文章能够帮你解决【超详细】c语言实现合并两个有序链表 leetcode21题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复