试写一算法,对单链表实现就地逆置,即利用原表的存储空间将线性表 (a1,a2,…,an)逆置为(a
试写一算法,对单链表实现就地逆置,即利用原表的存储空间将线性表(a1,a2,…,an)逆置为(an,an-1,…,a1)提示:将原链表中的头结点和第一个元素结点断开(令其...
试写一算法,对单链表实现就地逆置,即利用原表的存储空间将线性表
(a1,a2,…,an)逆置为(an,an-1,…,a1)
提示:将原链表中的头结点和第一个元素结点断开(令其指针域为空),先构成一个空表,然后将原链表中各结点从第一个结点起依次插入这个新表的头部。
展开
1个回答
展开全部
#include"stdio.h"
#include"iostream.h"
typedef int elementype;
#define MAXSIZE 100
struct list
{
elementype *elem;
int length;
int listsize;
};
//建立链表
int initlist(list *l)
{
int i=0,x;
l->elem=(elementype *)malloc(sizeof(elementype));
if(!l->elem)
{
cout<<"建立链表失败"<<endl;
return 1;
}
l->length=0;
l->listsize=MAXSIZE;
while(1)
{
cout<<"请输入链表数据:";
cin>>x;
if(x==0) break;
l->elem[i]=x;
l->length++;
i++;
}
return 1;
}
int swaplist(list *l)
{
int i=0,k,t;
k=(int)(l->length/2);
for(i=0;i<k;i++)
{
t=l->elem[i];
l->elem[i]=l->elem[l->length-1-i] ;
l->elem[l->length-1-i]=t;
}
return 1;
}
int displaylist(list *l)
{
int i=0;
cout<<"链表数据为:"<<endl;
for(i=0;i<l->length;i++)
{
cout<<l->elem[i]<<" ";
}
cout<<endl;
}
int main()
{
list *l;
initlist(l);
displaylist(l);
swaplist(l);
displaylist(l);
return 1;
}
#include"iostream.h"
typedef int elementype;
#define MAXSIZE 100
struct list
{
elementype *elem;
int length;
int listsize;
};
//建立链表
int initlist(list *l)
{
int i=0,x;
l->elem=(elementype *)malloc(sizeof(elementype));
if(!l->elem)
{
cout<<"建立链表失败"<<endl;
return 1;
}
l->length=0;
l->listsize=MAXSIZE;
while(1)
{
cout<<"请输入链表数据:";
cin>>x;
if(x==0) break;
l->elem[i]=x;
l->length++;
i++;
}
return 1;
}
int swaplist(list *l)
{
int i=0,k,t;
k=(int)(l->length/2);
for(i=0;i<k;i++)
{
t=l->elem[i];
l->elem[i]=l->elem[l->length-1-i] ;
l->elem[l->length-1-i]=t;
}
return 1;
}
int displaylist(list *l)
{
int i=0;
cout<<"链表数据为:"<<endl;
for(i=0;i<l->length;i++)
{
cout<<l->elem[i]<<" ";
}
cout<<endl;
}
int main()
{
list *l;
initlist(l);
displaylist(l);
swaplist(l);
displaylist(l);
return 1;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询