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

2025-02-22 11:49:28
推荐回答(1个)
回答1:

#include

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<<"请输入第"< cin>>p->d;
q->next=p;
q=p;
}
q->next=NULL;
}
return h;
}
//输出链表的数据
void output(Data *h)
{
while(h)
{
cout<d;
if(h->next)
{
cout<<" ";
}
h=h->next;
}
cout<}
//逆转链表
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<<"链表逆转前:"< output(h);
h=reverse(h);
cout<<"链表逆转后:"< output(h);
free(h);
return 0;
}