合并两个有序的单链表

25计算机考研,数据结构知识点整理(内容借鉴了王道408+数据结构教材),还会不断完善所整理的内容,后续的内容也会不断更新(可以关注),若有错误和不足欢迎各位朋友指出!

目录

1.算法思想

2.算法描述


删除算法中的循环条件(pre->nex!!=NULL&&k<i-1)与前插算法中的循环条件(pre!=NULL&&k<i-1)不同,因为前插时的插入位置有n+1个(n为当前单链表中数据元素的个数),i=n+1是指在第n+1个位置前插人,即在单链表的末尾插入,而删除操作中删除的合法位置只有几个,若使用与前插操作相同的循环条件,则会出现指针指空的情况,使删除操作失败。

1.算法思想

要利用现有的表LA和LB中的结点空间来建立新表LC,可通过更改结点的next域来重建新的元素之间的线性关系。为保证新表仍然递增有序,可采用尾插法建立单链表,只是新建表中的结点不用malloc,仅需从表LA和LB中选择合适的点插入新表LC即可。

2.算法描述

cpp 复制代码
LinkList MergeLinkList( LinkList LA,LinkList LB)
/*将递增有序的单链表LA和LB合并成一个递增有序的单链表LC*/
{
  Node *pa,*pb;
  LinkList LC;
  /*将LC初始置空表。pa和pb分别指向两个单链表LA和LB中的第一个结点,r初值为LC且始终指向LC的表尾*/
   pa=LA->next;
   pb=LB->next ;
   LC=LA;
   LC->next=NULL;r=LC;
   /*当两个表均未处理完时,比较选择将较小值结点插入新表LC*/
   while(pa!= NULL&&pb!=NULL)
   { if( pa->data<=pb->data)
      {r->next=pa;r=pa;pa=pa->next;}
     else
      {r->next=pb;r=pb;pb= pb->next;}
   }
   if(pa)/*若表LA未完,将表LA中后续元素链到新表LC表尾*/
      r->next= pa;
   else /*否则将表LB中后续元素链到新表LC表尾*/
        r->next= pb;
     free( LB);
     return(LC);
}  /* MergeLinkList * /
相关推荐
星星火柴9363 小时前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
艾莉丝努力练剑4 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
闪电麦坤955 小时前
数据结构:迭代方法(Iteration)实现树的遍历
数据结构·二叉树·
Cx330❀6 小时前
【数据结构初阶】--排序(五):计数排序,排序算法复杂度对比和稳定性分析
c语言·数据结构·经验分享·笔记·算法·排序算法
散1126 小时前
01数据结构-Prim算法
数据结构·算法·图论
..过云雨7 小时前
01.【数据结构-C语言】数据结构概念&算法效率(时间复杂度和空间复杂度)
c语言·数据结构·笔记·学习
拂晓银砾7 小时前
Java数据结构-栈
java·数据结构
旺小仔.7 小时前
双指针和codetop复习
数据结构·c++·算法
楽码9 小时前
底层技术SwissTable的实现对比
数据结构·后端·算法
瓦特what?10 小时前
关于C++的#include的超超超详细讲解
java·开发语言·数据结构·c++·算法·信息可视化·数据挖掘