#include
#include
struct Node
{
struct Node *next;
int value;
};
Node *insert(int a[],int n)
{
int *p,i,tmp;
p=a;
i=0;
Node *t,*q,*s,*h;
t=(Node *)malloc(sizeof(Node));
t->value=*(p+i);
t->next=NULL;
i++;
h=t;
while(i
{
s=h;
t=(Node *)malloc(sizeof(Node));
t->value=*(p+i);
t->next=NULL;
q=s;
s=s->next;
//如果当前节点的下一个节点不空,且当前节点比要插入的节点值小,则往下走
while(s!=NULL && (q->value < t->value))
{
q=s;
s=s->next;
}
//如果当前节点的下一个节点空,且当前节点小于要插入的节点值,
//则直接插在当前节点的后面
if(s==NULL && (q->value < t->value))
{
q->next=t;
}
//如果当前节点的下一个节点空,且当前节点大于要插入的节点值,
//则直接插在当前节点的前面
if(s==NULL && (q->value >= t->value))
{
q->next=t;
tmp=t->value;
t->value=q->value;
q->value=tmp;
}
//如果当前节点的下一个节点不空,且当前节点大于要插入的节点值,
//则先将要出入的节点插在当前节点的后面,然后再交换该节点和当前节点的值
if(s!=NULL&&(q->value >= t->value))
{
q->next=t;
t->next=s;
tmp=t->value;
t->value=q->value;
q->value=tmp;
}
i++;
}
return h;
}
//打印显示链表的值
void diplay(Node *h)
{
Node *s;
s=h;
while(s!=NULL)
{
printf("%d ",s->value);
s=s->next;
}
printf("\n Print over!\n");
}
//释放链表的存储空间
void freemem(Node *h)
{
Node *s,*t;
s=h;
while(s!=NULL)
{
//想想这样会出现什么问题?????
//free(s);
//s=s->next;
t=s->next;
free(s);
s=t;
}
printf("free over!\n");
}
int main()
{
int a[7]={6,10,1,5,4,9,7};
Node *head;
head=insert(a,7);
diplay(head);
freemem(head);
return 1;
}
到此为止吧,很基础的东西。