这是我刚学会敲的!!!
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
node *next;
}*head,*p,*t,*q;
int main()
{
int n,i,x;
head=(struct node*)malloc(sizeof(struct node));
head->next=NULL;
scanf("%d",&n);
for(i=1; i<=n; i++)
{
if(i==1)
{
scanf("%d",&x);
p=(struct node*)malloc(sizeof(struct node));
p->data=x;
p->next=NULL;
head->next=p;
}
else if(i==2)
{
scanf("%d",&x);
if(x>head->next->data)
{
p=(struct node*)malloc(sizeof(struct node));
p->data=x;
p->next=NULL;
head->next->next=p;
}
else
{
p=(struct node*)malloc(sizeof(struct node));
p->data=x;
p->next=head->next;
head->next=p;
}
}
else
{
scanf("%d",&x); //当时居然傻到忘了输入了!!!
if(x<head->next->data)
{
p=(struct node*)malloc(sizeof(struct node));
p->data=x;
p->next=head->next;
head->next=p;
}
else
{
t=head->next; //每次都要从head->next开始,如果这个是在for循环外的话,那么当输入下一个数字n时,t指向的是空
while(1)
{
if(t->next==NULL) //要先判断t下一个是不是为空,如果不为空才可以进行下一个数值的比较
{
p=(struct node*)malloc(sizeof(struct node));
p->data=x;
p->next=NULL;
t->next=p;
break;
}
else if(x>t->data&&x<t->next->data)
{
p=(struct node*)malloc(sizeof(struct node));
p->data=x;
p->next=t->next;
t->next=p;
break;
}
t=t->next;
}
}
}
}
p=head->next;
while(p)
{
printf("%d",p->data);
p=p->next;
if(p)
printf(" ");
}
printf("\n");
}
这个是看完大神代码理解后又敲的一遍,看完顿时感觉自己的之前办法好笨重啊!!!
<pre class="cpp" name="code">#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
node *next;
}*head,*p,*r,*q;
int main()
{
int n,x;
head=(struct node*)malloc(sizeof(struct node));
head->next=NULL;
scanf("%d",&n);
while(n--)
{
scanf("%d",&x);
r=(struct node*)malloc(sizeof(struct node));
r->data=x; //每输入一个数先放到一个空间里
p=head->next; //p指向下一个节点
q=head; q记录p的前一个节点
while(p)
{
if(r->data<p->data)
{
r->next=p;
q->next=r;
break;
}
q=p;
p=p->next;
}
if(!p)
{
q->next=r;
r->next=NULL;
}
}
p=head->next;
while(p)
{
printf("%d",p->data);
p=p->next;
if(p)
printf(" ");
}
printf("\n");
}