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
相关产品推荐
相关产品推荐

