C语言逆制带头结点链表哪错了?哪位帮帮忙?谢谢啦
发布网友
发布时间:2022-05-27 09:57
我来回答
共2个回答
热心网友
时间:2023-10-16 00:54
给,都已经改好了,具体的看注释吧:
#include<stdio.h> //需要包含着个头文件,后面的NULL的定义,以及getchar函数的定义都在这个头文件中
#include "malloc.h"
typedef struct node
{
char data;
struct node *next;
}linklist;
linklist *CREATLISTF()
{
char ch;
linklist *head,*s,*r;
head=(linklist *)malloc(sizeof(linklist));
r=head;
while((ch=getchar())!='$') //需要读取用户输入,所以需使用getchar给ch赋值
{
s=(linklist *)malloc(sizeof(linklist));
s->data=ch;
r->next=s;
s->next=NULL;//每次必须将s->next置为NULL,否则s->next将指向野地址
r=s;
}
return (head);
}
linklist *changelist(linklist *head)
{
linklist *p,*q,*r,*t;
t=head->next;
p=head->next;
q=p->next;
while(q)
{
r=q->next;q->next=p;
p=q;q=r;
}
head->next=p;
t->next=NULL;
return head;
}
void printlist(linklist *p) //这里printlist并不需要返回值,所以函数类型应该为void
{
p=p->next;//由于在创建链表时,head被置为空头结点(没有赋值),所以这里需要先将头结点空出,不打印,直接从下一个结点打印
while(p!=NULL)
{
printf("%c",p->data); //打印当前结点内容
if(p->next!=NULL)//当next结点不为空时,再指向
p=p->next;
else break;//如果next结点为空,则跳出
}
}
void main()
{
linklist *p;
p=CREATLISTF();
printlist(p);
p=changelist(p);
printlist(p);
}
热心网友
时间:2023-10-16 00:55
while(ch!='$')
{
s=(linklist *)malloc(sizeof(linklist));
s->data=ch;
if(head==NULL)
head=s;
else
{
r->next=s;
r=s;
}
}