算法:两个升序单链表的合并

打印 上一主题 下一主题

主题 1622|帖子 1622|积分 4866

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
将两个按值排序的带头结点的单链表La和Lb分列成一个升序的
单链表,并返回一个新的单链表的表头指针
(两个升序合并成升序,用尾插法)
  1. LinkList Merge_LinkList(LNode* La, LNode* Lb)
  2. {
  3.         //准备工作
  4.         LNode* Lc;//新链表的头结点
  5.         LNode* pc;//新链表的工作指针
  6.         LNode* pa;//La的工作指针
  7.         LNode* pb;//Lb的工作指针
  8.         LNode* ptr;//用于删除结点时保存指针
  9.         Lc = La;//Lc用La的头结点
  10.         pc = La;//pc用于尾指针
  11.         pa = La->next;//工作指针初始化
  12.         pb = Lb->next;//工作指针初始化
  13.        
  14.         //合并
  15.         while (pa != NULL && pb != NULL)
  16.         {
  17.                 if (pa->data < pb->data)
  18.                 {
  19.                         pc->next = pa;
  20.                         pc = pa;//pa尾插
  21.                         pa = pa->next;//pa后移
  22.                 }
  23.                 else if (pa->data > pb->data)
  24.                 {
  25.                         pc->next = pb;
  26.                         pc = pb;//pb尾插
  27.                         pb = pb->next;//pb后移
  28.                 }
  29.                 else//相等
  30.                 {
  31.                         pc->next = pa;
  32.                         pc = pa;//二者插一个即可
  33.                         pa = pa->next;//后移
  34.                         ptr = pb;
  35.                         pb = pb->next;//将另一个删除
  36.                         free(ptr);
  37.                 }
  38.         }
  39.         if (pa != NULL)//pa不空
  40.                 pc->next = pa;//将pa接到pc的后继结点
  41.         if (pb != NULL)
  42.                 pc->next = pb;
  43.         free(Lb);//释放Lb链表
  44.         return Lc;
  45. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

涛声依旧在

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表