数据结构 单链表 就地逆置 C++ 不允许申请新的节点空间 输入输出顺序一样

实现如下操作:根据键盘输入的n个整型元素建立单链表(要求单链表的元素顺序和输入的元素顺序一致),要求将单链表原地逆置(在逆置过程中不能申请新的结点空间),输出逆置后的元素... 实现如下操作:根据键盘输入的n个整型元素建立单链表(要求单链表的元素顺序和输入的元素顺序一致),要求将单链表原地逆置(在逆置过程中不能申请新的结点空间),输出逆置后的元素序列,要求元素和元素之间用空格隔开。 展开
 我来答
microroom
科技发烧友

2018-12-28 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:7118
采纳率:83%
帮助的人:1572万
展开全部
#include<iostream>

using namespace std;

struct Data
{
int d;
struct Data *next;
};

//创建链表
Data* create()
{
int i,n;
Data *h,*p,*q;

cout<<"请输入链表节点的数量:";
cin>>n;
if(n>0)
{
h=q=new Data();
cout<<"请输入第1个链表节点的数据(整数):";
cin>>h->d;
for(i=2;i<=n;i++)
{
p=new Data();
cout<<"请输入第"<<i<<"个链表节点的数据(整数):";
cin>>p->d;
q->next=p;
q=p;
}
q->next=NULL;
}
return h;
}
//输出链表的数据
void output(Data *h)
{
while(h)
{
cout<<h->d;
if(h->next)
{
cout<<" ";
}
h=h->next;
}
cout<<endl;
}
//逆转链表
Data* reverse(Data *h)
{
Data *p=h,*q=NULL;

if(h)
{
p=p->next;
h->next=NULL;
}
while(p)
{
q=p->next;
p->next=h;
h=p;
p=q;
}
return h;

}
//释放链表
void free(Data *h)
{
Data *p=h;

while(p)
{
h=h->next;
delete p;
p=h;
}
}
int main()
{
Data *h=create();
cout<<"链表逆转前:"<<endl;
output(h);
h=reverse(h);
cout<<"链表逆转后:"<<endl;
output(h);
free(h);
return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式