双链表逆置的算法中有几点不懂,求年糕指教一二,在下不胜感激涕泗。
#include<stdio.h>#include<malloc.h>
typedef struct node
{
char name[20];
struct node *prior,*next;
}stud;
stud *creat(int n)
{
stud *p,*h,*s;
int i;
h=(stud*)malloc(sizeof(stud));
h->name[0]='\0';
h->prior=NULL;
h->next=NULL;
p=h;
printf("Input the records:\n");
for(i=0;i<n;i++)
{
s=(stud*)malloc(sizeof(stud));
p->next=s;
scanf("%s",s->name);
s->prior=p;
s->next=NULL;
p=s;
}
p->next=NULL;
return(h);
}
stud *reverse(stud *head)
{
stud *p,*r,*h;
h=head->next;
if(h&&h->next)
{
p=h;
r=p->next;
p->next=NULL;
while(r)
{
p=r;
r=r->next;
p->next=h;
h->prior=p;
h=p;
}
head->next=h;
h->prior=head;
return head;
}
}
void main()
{
int n;
stud *q;
printf("Input the count of the nodes you want to creat:");
scanf("%d",&n);
q=creat(n);
q=reverse(q);
printf("the result linklist:\n");
while(q)
{
printf("%s ",&*(q->name));
q=q->next;
}
getchar();
}
第一个问题定义函数是用自编的类型,那么这里出现的红色类型是什么意思?
第二个问题逆置双链表的函数的详细中文解释,不是很清楚这个设计思路?
第三个问题取地址又加*号是为什么?
每个问题对应一段红色标记,谢谢指导!