#include "stdio.h"
typedef struct node
{
int data;
struct node *next;
}link;
link * creatLink()
{
link*p,*s,*head;
head= (link*)malloc(sizeof(link));
head->data= -1;
p= head;
intx;
printf("inputx,separate by kongge,end with 0:");
scanf("%d",&x);
while(x!=0)
{
s= (link*)malloc(sizeof(link));
s->data= x;
p->next= s;
p= s;
scanf("%d",&x);
}
p->next= NULL;
return head;
}
int lengthofLink(const link * const head)//第一个const指向类型表示指向link指针,不能指其他类型,第二个const指向指针修饰指针表示head指向的地址不可变。
{
if(head== NULL)
return 0;
intlen = 1;
link* p;
p= head->next;
while(p!=NULL)
{
len+= 1;
p= p->next;
}
return len;
}
void printLink(link * const head)
{
if(head== NULL)
return;
link* p = head;
while(p!=NULL)
{
printf("%d\t",p->data);
p= p->next;
}
printf("\n");
}
link * insertLink(link *head,int num)
{
link*p1,*p2,*p0;
p0= (link *)malloc(sizeof(link));
p0->data= num;
p1= head ;
while(num>p1->data&& p1->next !=NULL)
{
p2= p1;
p1= p1->next;
}
if(num<=p1->data)
{
if(p1==head)
{
p0->next=head;
head= p0;
}
else
{
p2->next= p0;
p0->next= p1;
}
}
else//num>所有现有数,插尾部
{
p1->next= p0;
p0->next= NULL;
}
return (head);
}
link * del(link *head,int num)
{
link*p1,*p2;
p1= head;//->next ;
while(num!=p1->data&&p1->next !=NULL)
{
p2=p1;
p1= p1->next;
}
if(num== p1->data )
{
if(p1==head)
{
head= p1->next;
free(p1);
}
else
{
p2->next=p1->next;
free(p1);
}
}
return head;
}
link * reverselink(link *head)//逆序
{
link*p1,*p2,*p3;
//判断是否为空,这几个函数都应该判断,head->next判断?
if(head==NULL|| head->next ==NULL)
returnhead;
p1= head;
p2= p1->next;
while(p2)
{
p3= p2->next;
p2->next= p1;
p1= p2;
p2= p3;
}
head->next= NULL;
head= p1;
return head;
}
void main()
{
link* head = creatLink();//建表
printf("lenth:%d\n",lengthofLink(head));//表长
printLink(head);//打印表
intnum;
printf("输入要插入的数字:");
scanf("%d",&num);
head= insertLink(head,num);//插入
printLink(head);
head= del(head,num);//删除
printLink(head);
head = reverselink(head);//逆序
printLink(head);
}