设计一个算法,逆置带头结点的动态单链表(head)。要求利用原表的结点空间并用尽可能少的时间完成。
#include<stdio.h>
#include<malloc.h>
#define DATATYPE2 char
typedef struct node
{
DATATYPE2 data;
struct node *next;
}LINKLIST;
LINKLIST *init()
{
LINKLIST *head;
head=(LINKLIST *)malloc(sizeof(LINKLIST));
head->next=NULL;
return head;
}
LINKLIST *creat()
{
LINKLIST *head,*p,*q;
char n;
head=init();
q=head;
printf("请输入一串字符,以$结束:\n");
scanf("%c",&n);
while(n!='$')
{
p=(LINKLIST *)malloc(sizeof(LINKLIST));
p->data=n;
p->next=q->next;
q->next=p;
q=p;
scanf("%c",&n);
}
return head;
}
void rev(LINKLIST *head)
{
LINKLIST *p,*q;
p=head->next;
head->next=NULL;
while(p!=NULL)
{
q=p;
p=p->next;
q->next=head->next;
head->next=q;
}
}
void print(LINKLIST *head)
{
LINKLIST *p;
p=head->next;
printf("倒置后的字符串为:\n");
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
}
int main()
{
LINKLIST *head;
head=creat();
rev(head);
print(head);
return 0;
}