我是靠谱客的博主 美丽钻石,最近开发中收集的这篇文章主要介绍【超详细】c语言实现合并两个有序链表 leetcode21题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目:将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题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部