按从大到小顺序创建单链表简易写法
Node *head;
head=(Node *)malloc(sizeof(Node));
head->next=NULL;
Node *a,*b;
a=b=head;
q->next=NULL;
if(head->next==NULL)
{
head->next=q;
}
else
{
a=head;
b=head->next;
while(FG(q)<FG(b)&&b!=NULL)
{
a=a->next;
b=b->next;
}
a->next=q;
q->next=b; //无论是因为b为null停止循环还是找到比q的数值小的结点停止循环,都是这种写法
}
改进算法,发现那个if可以直接合并到else的情况中
Node *CreatLinkList(int n)
{
Node *head;
head=(Node *)malloc(sizeof(Node));
head->next=NULL;
while(n--)
{
Node *q;
Node *a,*b; //双指针,a在前,b在后
q=(Node *)malloc(sizeof(Node));
scanf("%d",&q->stunum);
scanf("%s",q->name);
scanf("%d",&q->phnum);
q->next=NULL;
a=head;
b=head->next; //即使b为null,也能正常创建
while(b!=NULL&&b->stunum<q->stunum)
{
a=a->next;
b=b->next;
}
a->next=q;
q->next=b;
}
return head;
}