#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
//#define NULL 0
typedef char datatype;
typedef struct node
{
datatype data;
struct node *next;
}linklist;
linklist *CreatListF() //尾插法创建带头结点的链表
{
char ch;
linklist *head,*s,*r;
head=(linklist*)malloc(sizeof(linklist));
r=head;
printf("请输入链表中的元素,以'#'结束.\n");
while((ch=getche())!='#') //输入为#时结束
{
s=(linklist*)malloc(sizeof(linklist));
s->data=ch;
r->next=s;
r=s;
}
r->next=NULL;
return head;
}
void Invertion(linklist *head) //逆置
{
linklist *p=head->next,*s,*r; //定义三个指针
r=NULL; //将当前地址设为空
while(p->next!=NULL) //当当前的下一个地址为空时停止
{
s=p->next; //用s记住当前的下一个地址
p->next=r; //当前的下一个地址改为r,r为前一个的地址
r=p; //用r记住当前的地址
p=s; //当前的位置移动到当前的下一个地址(由s记录的)
}
p->next=r; //当前的下一个地址改为r,r为前一个的地址
head->next=p; //头指针的下一个地址指向当前地址
}
void Output(linklist *head) //输出函数
{
linklist *p=head->next;
printf("\n逆置后链表中元素为:\n");
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
linklist *head;
head=CreatListF();
Invertion(head);
Output(head);
getch();
}
单链表的逆置问题
最新推荐文章于 2023-11-29 11:12:16 发布