数据结构与算法C语言实现——单链表逆置
雨中漫步
构造一个单链表L,其头结点指针为head,编写程序实现将L逆置。(即最后一个结点变成第一个结点,原来倒数第二个结点变成第二个结点,如此等等。)
解:如图:
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LinkNode;
void Disp(LinkNode *L)
{
LinkNode *p=L->next;
while(p!=NULL)
{
printf("%d",p->data);
p=p->next;
}
}
void trans(LinkNode * &L)
{
LinkNode *p,*q;
p=L->next;
L->next=NULL;
while(p!=NULL)
{ q=p->next; //q用来临时保存p的后继结点
p->next=L->next;//头插法
L->next=p;
p=q;
}
}
int main()
{LinkNode *L,*s,*r;int a,n=4;
L=(LinkNode *)malloc(sizeof(LinkNode));
L->next=NULL;
r=L;
while(n--)
{
s=(LinkNode *)malloc(sizeof(LinkNode));//尾插法插入5组数据
scanf("%d",&a);
s->data=a;
r->next=s;
r=s;
}
r->next=NULL;
trans(L);
Disp(L);
return 0;
}