#include<stdio.h>
#include<malloc.h>
#define datatype char
typedef struct node
{
datatype data;
struct node *next;
}linklist;
linklist *creatlist() //尾插法建立链表
{char ch;
linklist *head,*s,*r;
head=(linklist*)malloc(sizeof(linklist));
r=head;
ch=getchar();
while(ch!='$')
{s=malloc(sizeof(linklist));
s->data=ch;
r->next=s;
r=s;
ch=getchar();
}
r->next=NULL;
return head;
}
void printlist(linklist *t) //输出逆置后链表的节点
{
linklist *p;
p="t";
printf("zuihou de lian biao :\n");
while(p->next!=NULL)
{printf("%c->",p->data);
p="p-">next;
}
}
void printlist2(linklist *t) //输出逆置前的链表
{
linklist *p;
p="t-">next;
printf(" xian xing biao :\n");
while(p->next!=NULL)
{printf("%c->",p->data);
p="p-">next;
}
}
linklist *reverlist(linklist *head) //逆置链表子函数
{
linklist *q,*p;
if(head && head->next) //判断是否两个以上的元素
{
p="head";
q="p-">next;
p->next=NULL;//在第一和第二个节点间断开,原来链表为两个,分别
由head和q指向
while(q)
{
p="q";
q="q-">next;//每次将p指向的第一个节点插入到head指向的节点后
p->next=head;
head="p";
}
}
return(head);
}
void main()
{
linklist *head=NULL,*p;
printf("please input the serial:\n");
head=creatlist();/新建链表
printf("\n\n");
printlist2(head);//输出逆置前的链表
printf("\n");
p=reverlist(head);//逆置子函数调用
printf("\n\n");
printlist(p);//输出逆置后的链表
}
文章评论(0条评论)
登录后参与讨论