为什么执行到链表归并的时候就不执行了呢?
#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的头节点,将值小的节点作为新链表的头节点,然后递归地对两个链表的剩余部分进行归并操作。 - 将递归调用的结果连接到当前节点的后面,完成归并。
排序链表,用归并才够味!深入链表归并排序的原理与实现
摘要: 链表排序因非连续存储特性,传统排序算法效率较低。归并排序凭借分治策略与链表结构的天然契合,成为最优解——无需随机访问,仅需指针操作即可实现O(n log n)时间复杂度。核心步骤:快慢指针分割链表、递归排序子链表、合并有序链表。注意彻底断链和合并剩余节点,避免死循环。算法选择需结合数据结构特性,链表归并排序体现了“结构+算法”的深度配合,是面试中考察综合能力的经典题型。实际实现时需警惕指针操作陷阱,递归版本可能需优化为迭代以防栈溢出。
C语言数据结构 链表与归并排序实例详解
而归并排序是一种高效的排序算法,尤其适用于链表的排序,因为它不需要额外的连续内存空间。链表的分割是归并排序的关键步骤。
C语言——链表的归并_c语言链表详解
#### 标题与描述分析标题“C语言——链表的归并_c语言链表详解”和描述“用c语言写链表归并”明确指出了本文的主要内容:使用C语言实现链表的归并操作,并对C语言中的链表进行详细讲解。
数据结构期末考试真题
是否为最大堆?为什么?并图示之。(8分)**题目解析:**本题考查的是最大堆(Max Heap)的基本概念及其性质。最大堆是一种特殊的完全二叉树结构,其中每个节点的值都大于或等于其子节点的值。



