双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

为什么执行到链表归并的时候就不执行了呢?

wangya55 wangya55 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include<iostream.h>

struct node{
int data;
node *next;
};

node* Listcreat() //创建链表
{ node *head,*n,*tail;
int a;
head=NULL; //空链
cout<<"请输入数据(0表示结束):";
for(cin>>a;a!=0;cin>>a)
{ n=new node;
n->data=a;
if(!head) tail=head=n;
else tail->next=n,tail=n;
}
if(head) tail->next=NULL;
return head;
}

void clearlist(node *list)//如果链表不是有序且是升序的,则将链表被所有结点删除
{ node*head,*p;
head=list;
while(head)
{ p=head;head=head->next;delete p;}
cout<<"无效数据清除成功!\n";
}

int panduan(node *List)//判断链表是不是有序(升序)的链表
{ node *head,*p;
head=List;
if(head)
{p=head->next;
for(head;head->next!=NULL;head=head->next,p=head->next)
for(p;p!=NULL;p=p->next)
if(p->data<head->data) return 0;
if(!head->next) return 1;
}else return 0;
}

void print(node*List)//输出链表上所有的数据元素
{ node *p;
p=List;
while(p)
{ cout<<p->data<<'\t';p=p->next; }
cout<<endl;
}


void combin (node *La,node *Lb) //实现链表La,Lb的归并,归并后为Lc
{
node *pa,*pb,*pc,*Lc;
pa=La->next;
pb=Lb->next;
Lc=pc=pa; //归并后的链表的头结点指向连表La的头结点
while(pa&&pb)
{ if(pa->data<=pb->data)
{pc->next=pa;pc=pa;pa=pa->next;}
else
{pc->next=pb;pc=pb;pb=pb->next;}
}
if(pa) pc->next=pa;//插入剩余的结点
else pc->next=pb;//插入剩余的结点
delete(Lb);
print(Lc);//输出归并后的集合元素
}

void main()
{ node *List_La, *List_Lb, *List_Lc;

cout<<"集合A"<<endl;
List_La=Listcreat();//创建链表List_La存储集合A的元素
while(!panduan(List_La))
{
cout<<"输入的数据无效,请输入有序的集合元素!\n";
clearlist(List_La);
List_La=Listcreat();//判断后重新输入集合元素
}

cout<<"集合B"<<endl;
List_Lb=Listcreat();//创建链表List_La存储集合A的元素
while(!panduan(List_Lb))
{
cout<<"输入的数据无效,请输入有序的集合元素!\n";
clearlist(List_Lb);
List_Lb=Listcreat();
}
cout<<"经过归并后!";
combin(List_La,List_Lb);
}
...全文

相关推荐

链表归并的操作,将两个链表合并成一个链表

- 比较链表A和B的头节点,将值小的节点作为新链表的头节点,然后递归地对两个链表的剩余部分进行归并操作。 - 将递归调用的结果连接到当前节点的后面,完成归并。

zhanghaiyoudeerzi

排序链表,用归并才够味!深入链表归并排序的原理与实现

摘要: 链表排序因非连续存储特性,传统排序算法效率较低。归并排序凭借分治策略与链表结构的天然契合,成为最优解——无需随机访问,仅需指针操作即可实现O(n log n)时间复杂度。核心步骤:快慢指针分割链表、递归排序子链表、合并有序链表。注意彻底断链和合并剩余节点,避免死循环。算法选择需结合数据结构特性,链表归并排序体现了“结构+算法”的深度配合,是面试中考察综合能力的经典题型。实际实现时需警惕指针操作陷阱,递归版本可能需优化为迭代以防栈溢出。

Echo_Wish

C语言数据结构 链表与归并排序实例详解

而归并排序是一种高效的排序算法,尤其适用于链表的排序,因为它不需要额外的连续内存空间。链表的分割是归并排序的关键步骤。

weixin_38699757

C语言——链表的归并_c语言链表详解

#### 标题与描述分析标题“C语言——链表的归并_c语言链表详解”和描述“用c语言写链表归并”明确指出了本文的主要内容:使用C语言实现链表的归并操作,并对C语言中的链表进行详细讲解。

Zzh .

数据结构期末考试真题

是否为最大堆?为什么?并图示之。(8分)**题目解析:**本题考查的是最大堆(Max Heap)的基本概念及其性质。最大堆是一种特殊的完全二叉树结构,其中每个节点的值都大于或等于其子节点的值。

peng_yaoming
评论 11
收藏 已收藏
分享
返回顶部
wangya55
C++ 语言 65,214 成员 250,514 内容