第1个回答 2009-10-11
算法(头结点为L)
p=L->next;
q=p->next;
r=q->next;
p->next=NULL;
while(r)
{
q->next=p;
p=q;
q=r;
r=r->next;
}
L->next=q;
q->next=p;
-------------------------C程序如下
/*链表逆置*/
#define NULL 0
typedef int DataType;
typedef struct node{
DataType data;
struct node *next;
}LinkedNode,*LinkList;
main()
{
LinkList L,p,q;
DataType d;
void change(LinkList L);/*逆置单链表*/
void print(LinkList L);/*格式化输出*/
/*链表初始化*/
L=(LinkedNode *)malloc(sizeof(LinkedNode));
L->next=NULL;
p=L;
while(1)
{
printf("Input data(End of 0):");
scanf("%d",&d);
if(d==0)break;
if((q=(LinkedNode *)malloc(sizeof(LinkedNode)))==NULL)
{
printf("ERROR!");
getch();
exit(0);
}
q->data=d;
q->next=NULL;
p->next=q;
p=q;
}
/*初始化结束*/
printf("Before change:\n");
print(L);
printf("\nAfter change:\n");
change(L);
print(L);
getch();
}
/*逆置单链表*/
void change(LinkList L)
{
LinkList p,q,r;
p=L->next;
q=p->next;
r=q->next;
p->next=NULL;
while(r)
{
q->next=p;
p=q;
q=r;
r=r->next;
}
L->next=q;
q->next=p;
}
/*格式化输出*/
void print(LinkList L)
{
LinkList p=L;
if(p->next)
while(p->next)
{p=p->next;
printf("%d - ",p->data);
}
}
第2个回答 2009-10-11
把原来是动态单链表的改了一下
用头插入法来做,直到输入0时,按enter键结束。
#include <iostream>
using namespace std;
typedef struct lnode
{
int data;
struct lnode *next;
}Lnode,*Linklist;
Linklist Creat_linklist()
{
Linklist L=NULL;
Lnode *s;
int x;
cin>>x;
while(x!=0)
{
s=new Lnode;
s->data=x;
s->next=L;
L=s;
cin>>x;
}
return L;
}
int main()
{
cout<<"请输入数据:"<<endl;
Linklist p;
p=Creat_linklist();
while(p!=NULL)
{
cout<<p->data<<' ';
p=p->next;
}
return 0;
}