C语言/数据结构——每日一题(合并两个有序链表)

一.前言

嗨嗨嗨,大家好久不见!今天我在LeetCode看到了一道单链表题:https://leetcode.cn/problems/merge-two-sorted-lists想着和大家分享一下,废话不多说,让我们开始今天的题目分享吧。

二.正文

1.1题目描述

1.2题目分析

我们还是可以通过创建新链表的方法来解题:

1.首先我们创建新的单链表:ListNode* phead和ListNode* ptail分别作为新链表的头节点和尾节点。

2.其次我们再创建两个指针分别遍历上下两个链表:l1与l2。

3.如果l1小于或等于l2,那么将l1插入到我们的新链表中,并让l1移到下一个节点。

反之,那l2将插入到我们的新链表中,并让l2移到下一个节点。

需要注意的是如果phead初始是NULL的话,不论初始l1和l2谁大谁小都要让phead和ptail等于它们与之相对应的头节点。

例如:如果此时l1小于或等于l2,且phead=NULL。那摩就让phead=ptail=l1。

同理,反之,phead=ptail=l2。

1.3代码实现

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
 typedef struct ListNode ListNode;
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{
    if(list1==NULL)
        return list2;
    if(list2==NULL)
    return list1;
    ListNode* l1=list1;
    ListNode* l2=list2;
    ListNode* phead;
    ListNode* ptail;
    phead=ptail=NULL;
    while(l1!=NULL&&l2!=NULL)
    {
if((l1->val)<=(l2->val))
{
    if(phead==NULL)
    {
        phead=ptail=l1;
        l1=l1->next;
    }
    else
    {
        ptail->next=l1;
        ptail=ptail->next;
        l1=l1->next;
    }
}
else
{
    if(phead==NULL)
    {
        phead=ptail=l2;
        l2=l2->next;
    }
    else{
        ptail->next=l2;
        ptail=ptail->next;
        l2=l2->next;
    }
}
    }
    if(l1==NULL)
    ptail->next=l2;
    if(l2==NULL)
    ptail->next=l1;
    return phead;
}

值得注意的是:我们的while结束条件中有两种结束情况:l1=NULL或l2=NULL这两种情况。

当l1=NULL的时候说明l1链表中的元素已经全部插入到新链表中了了,但是l2中的元素还没有插入完,这时候就需要我们在最后让l2中没插入的数据直接插入到新链表后面。

同理,当l2=NULL的时候说明l2链表中的元素已经全部插入到新链表中了了,但是l1中的元素还没有插入完,这时候就需要我们在最后让l1中没插入的数据直接插入到新链表后面。

三.结言

今天的题目分享就到这了,同学们我们下期再见。

相关推荐
Dillon Dong31 分钟前
STM32嵌入式:使用 MT29F8G08ABACAWP NAND 的FLASH全面指南
c语言·stm32
一叶知秋061 小时前
数据结构-什么是队列?
数据结构·队列
Jasmine_llq1 小时前
《CF280C Game on Tree》
数据结构·算法·邻接表·深度优先搜索(dfs)·树的遍历 + 线性累加统计
zhongvv2 小时前
对单片机C语言指针的一些理解
c语言·数据结构·单片机·指针·汇编语言
im_AMBER2 小时前
Leetcode 102 反转链表
数据结构·c++·学习·算法·leetcode·链表
朔北之忘 Clancy3 小时前
2025 年 9 月青少年软编等考 C 语言一级真题解析
c语言·开发语言·c++·学习·数学·青少年编程·题解
Xの哲學3 小时前
深入剖析Linux文件系统数据结构实现机制
linux·运维·网络·数据结构·算法
C雨后彩虹3 小时前
竖直四子棋
java·数据结构·算法·华为·面试
你怎么知道我是队长3 小时前
C语言---缓冲区
c语言·开发语言
荒诞硬汉4 小时前
对象数组.
java·数据结构