You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言如何不排序合并两个链表?现有合并代码输出排序结果如何修改

排序逻辑定位

你代码里的排序逻辑全部集中在mergeLinkedList函数中,核心的排序判断代码段如下:

if(LLOne->data <= LLTwo->data){
    temp = LLOne;
    LLOne = LLOne->next;
} else {
    temp = LLTwo;
    LLTwo = LLTwo->next;
}

这段代码每次循环都会对比两个链表当前节点的数值大小,优先将数值更小的节点接入结果链表,所以最终输出的是升序排列的合并结果。

符合需求的修改方案

你要实现先完整拼接第一个链表所有节点、再拼接第二个链表所有节点的需求,不需要排序逻辑,直接简化mergeLinkedList函数即可:

struct node* mergeLinkedList(struct node* LLTwo, struct node* LLOne){
    // 第一个链表为空直接返回第二个链表
    if(LLOne == NULL) return LLTwo;
    // 找到第一个链表的尾节点
    struct node *tail = LLOne;
    while(tail->next != NULL){
        tail = tail->next;
    }
    // 尾节点对接第二个链表的头节点完成拼接
    tail->next = LLTwo;
    // 返回第一个链表的头作为合并后链表的头
    return LLOne;
}

注意:你当前使用的insert是头插法,插入元素的顺序和链表实际存储顺序是倒序的,比如依次插入2、4、7,链表实际顺序是7-->4-->2,这个是插入逻辑的特性,和合并逻辑无关,不需要的话可以自行把insert改成尾插逻辑即可

内容的提问来源于stack exchange,提问作者Tanveer Rifu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 14:36:00