合并两个有序链表合并之后还是有序的,首先这两个链表是需要是有序的,也就是说这两个链表已经排好序了,才能进行合并。但是昨天也写过冒泡排序的程序了,如果让你合并两个不是有序的链表合并之后有序,那可以先将两个链表进行冒泡排序再进行合并就可以了。

首先明确思路,合并两个链表有两种方式,第一种就是创建一个新的链表,不断的将原来两个链表的数据接入新的链表,但是还有另外一种方式就是在原来两个链表上进行操作,将其中一个链表的数据不断的和另一个链表的数据进行比较,如果第一个链表的数据比第二个大的话那就将第二个链表的数据放在第一个链表当前数据的前边,今天我所写的代码是第一种的方式,第一种相对来说容易理解,并且容易操作。

SListNode* SListMerge(SListNode* list1, SListNode* list2){SListNode *New=BuySListNode(0);SListNode*head=New;while (list1&&list2 ){if ((list1->_data) < (list2->_data)){SListPushBack(&New,list1->_data );list1 = list1->_next;}else{SListPushBack(&New, list2->_data);list2 = list2->_next;}}if (list1 == NULL){while (list2){SListPushBack(&New, list2->_data);list2 = list2->_next;}}if (list2 == NULL){while (list1){SListPushBack(&New, list1->_data);list1 = list1->_next;}}return head;}

先看一下代码。上来首先判断是不是会有传入的两个链表为空的情况。

while (list1&&list2 )

{

if ((list1->_data) < (list2->_data))

{

SListPushBack(&New,list1->_data );

list1 = list1->_next;

}

else

{

SListPushBack(&New, list2->_data);

list2 = list2->_next;

}

}

之后进入while循环如果有一个链表为空的话就需要结束循环,进入循环之后两个节点的数据进行比较,将其中小的那个的数据通过尾插函数将数据插入新的链表中,之后传入数据的那个链表的指针就需要向后移动一个。

if (list1 == NULL)

{

while (list2)

{

SListPushBack(&New, list2->_data);

list2 = list2->_next;

}

}

if (list2 == NULL)

{

while (list1)

{

SListPushBack(&New, list1->_data);

list1 = list1->_next;

}

}

如果跳出while循环,不排除会存在其中一个为空,但是另一个还没走到链表最后的情况,所以需要将非空的那一个链表剩下的数据再次通过尾插插入新的链表中。

之后 返回新链表的头指针,就可以了。

void SListPushBack(SListNode** ppHead, DataType x){SListNode *cur = NULL;SListNode *NewNode;cur = *ppHead;NewNode = BuySListNode(x);if (*ppHead == NULL){*ppHead = NewNode;(*ppHead)->_next = NULL;}else{while (cur->_next){cur = cur->_next;}cur->_next = NewNode;NewNode->_next = NULL;}}
SListNode* BuySListNode(DataType x){SListNode *NewNode;NewNode = (SListNode*)malloc(sizeof(SListNode));if (NewNode == NULL){printf("空间分配失败\n");}else{NewNode->_data = x;NewNode->_next = NULL;}return NewNode;}

这两个分别是尾插函数和分配空间的函数。

合并两个有序链表,合并后依然有序相关推荐

  1. 将两个有序链表合并成一个链表

    代码实现功能如下:将两个有序链表合并成一个有序链表. 具体思路如下:首先自己调用链表的创建函数,手动创建两个有序链表,链表的创建以输入0作为截止标志.创建好两个有序链表之后,将两个链表的头结点进行比较 ...

  2. 将两个有序链表合并为一个链表任然有序C语言

    将两个有序链表合并为一个链表任然有序,两个链表都是从大到小或者从小到大. 方法: 1.将两个链表连起来,对所有元素进行排序. 2.因为两个链表的长度可能不同,则将两链表相同长度的一部分进行排序,将较长 ...

  3. 链表面试题3:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成 的。

    链表面试题3:将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成 的. 首先我们的思想是将得一个链表和第二个链表的每个结点进行比较,谁小谁就插入到新链表的最后. ...

  4. 【数据结构笔记】将两个递增的有序链表合并为一个递增的有序链表

    将两个递增的有序链表合并为一个递增的有序链表.要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间.表中不允许有重复的数据. [题目分析] 合并后的新表用头指针Lc指向,pa和pb分别 ...

  5. 两个有序链表合并成一个有序的单链表

    将这两个有序链表合并成一个有序的单链表 要求结果链表仍使用原来两个链表的存储空间,不另外占用其它的存储空间 表中允许有重复数据 算法描述 (1)定义一个合并后的指针pc指向La表的头结点.由于要求不占 ...

  6. c++实现两有序链表合并成一个新的有序链表

    包括定义的链表,插入数据,及输出打印 #include <iostream> #include <vector> #include <numeric> #inclu ...

  7. Coding:两个从大到小的有序链表合并成一个从小到大有序链表

    要求 请实现一个函数,把两个从大到小的有序链表合并成一个链表,新的链表是一个从小到大的有序链表. struct list {int value;list* next; }; list * merge ...

  8. Java实现两个递增有序链表合并成一个递增有序链表和两个非递减有序链表合成一个非递增有序链表

    代码如下: package sjjgniub;import java.util.LinkedList; import java.util.Scanner;@SuppressWarnings(" ...

  9. 题目17 合并两个排序链表

    / // 7. 题目17 合并两个排序链表 //时间复杂度:O(n), 空间复杂度:O(1) ListNode<int>* MergeSortedLists(ListNode<int ...

最新文章

  1. FEMS:微生物群落生态学数据挖掘的R包microeco
  2. Using the URLconf defined in catsui.urls, Django tried these URL patterns, in this order:
  3. 关于使用AsyncTaskLoader的使用
  4. [译]ABP vNext介绍
  5. java byte数组string_byte数组和String之间的转化
  6. A Walk Through the Forest dijkstra(邻接矩阵)
  7. 鸿蒙车载智慧屏评测,华为鸿蒙系统初体验,华为智慧屏评测,功能超乎想象
  8. 第三章 进程管理笔记
  9. 数据结构上机实践第八周项目9-广义表算法库及应用
  10. CleanMyMac偏好设置你知道多少?
  11. JMS开发(一):基础理论认知
  12. 深入浅出设计模式 ------ Abstract Factory(抽象工厂)
  13. 缓和曲线计算方式实现,全站仪中道路数据计算
  14. BLDC无刷直流电机的原理及驱动基础
  15. 浅谈String的堆内存和栈内存
  16. 【开源SPL】列存数据仓库怎样更高效
  17. uniapp去掉返回键
  18. 电子信息 物联网 微电子等专业毕业设计选题表1-20
  19. 互联网产品思考(一) —— 基本理念
  20. UNIX基础--Shells

热门文章

  1. Django框架系列指南【一】导读
  2. nsi脚本中的第三方plugin
  3. 在对设置表格设置table-layer:fixed样式后,发现表格中有一行合并过,其它没有合并的行的列宽会平均化,对列宽的设置会失效
  4. PHP反序列化CTF例题
  5. Win10系统下禁止ie浏览器自动跳转到Microsoft Edge浏览器
  6. 2315. 统计星号
  7. 21个极大提高开发效率的VS Code快捷键
  8. 将Pandas列转换为日期时间
  9. 饼状图(PieChart)与柱形图(BarChart)的使用
  10. ef mysql 优化_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...