栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

《剑指offer-P23》【剑指Offer 25.合并两个排序的链表】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

《剑指offer-P23》【剑指Offer 25.合并两个排序的链表】

个人主页:企鹅不叫的博客

​ 专栏

  • C语言初阶和进阶
  • C项目
  • Leetcode刷题
  • 初阶数据结构与算法
  • C++初阶和进阶
  • 《深入理解计算机操作系统》
  • 《高质量C/C++编程》

⭐️ 博主码云gitee链接:代码仓库地址

⚡若有帮助可以【关注+点赞+收藏】,大家一起进步!


文章目录
  • 一、题目
    • 1.题目描述
    • 2.原题链接
  • 二、解题报告
    • 1.思路分析
    • 2.代码详解


一、题目 1.题目描述

2.原题链接

剑指Offer 25.合并两个排序的链表

二、解题报告 1.思路分析

思路:

​ 用一个哨兵将两个链表同时遍历链接起来,遍历完之后将剩余未链接的连接到新链表后面

2.代码详解
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
    //带哨兵位
    struct ListNode* head, *tail;
    head = tail = (struct ListNode*)malloc(sizeof(struct ListNode));        //1
    head->next = NULL;

    while(list1 != NULL && list2 != NULL){                                  //2
        if(list1-> val < list2-> val){
            tail->next = list1;
            tail = list1;
            list1 = list1->next;
        }else{
            tail -> next = list2;
            tail = list2;
            list2 = list2->next;
        }
    }
    if(list1 != NULL){                                                      //3
        tail->next = list1;
    }
    if(list2 != NULL){
        tail->next = list2;
    }
    struct ListNode* list = head->next;                                     //4
    free(head);
    return list;                                                            //5
}

1.创建哨兵节点
2.两个链表同时遍历
3.将两个链表剩余部分继续链接到新链表上
4.为方便释放内存,提前记录头
5.返回哨兵位下一位


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/853414.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号