1.单链表创建
typedef struct student{
int data;
struct student * next;
}node;
node * list_creat(void)
{
node *head,*p,*s;
int x;
int cycle = 1;
head = (node *)malloc(sizeof(node));
p=head;
while(cylce)
{
printf("input data: \n");
scanf("%d",&x);
if(x!=0)
{
s=(node *)malloc(sizeof(node));
s->data=x;
s->next=NULL;
p->next=s;
p=s;
}
else
cylce=0;
}
p=head;
head=head->next;
free(p);//???
return head;
}
2.单链表计数
int list_count(node * head)
{
int n=0;
node *p=head;
while(p!=NULL)
{
n++;
p=p->next;
}
return n;
}
3.单链表节点插入
node *list_insert(node *head, int num)
{
node *p1,*p2,*tmp;
p1=head;
tmp=(node *)malloc(sizeof(node));
tmp->data=num;
while(num>p1->data&&p1->next!=NUL)
{p2=p1 p1=p1->next;}
if(num<=p1->data)
{
if(p1==head)
{tmp->next=head;head=tmp;}
else
{p2->next=tmp;tmp->next=p1;}
}
else
{
p1->next=tmp;
tmp->next=NULL;
}
return head;
}
4.单链表节点删除
node *list_del(node * head,int num)
{
node *p1,*p2;
p1=head;
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)}
}
else
printf("node not found!\n");
return (head);
}
5.单链表翻转
node *list_revert(node *head)
{
node *p1,*p2,*p3;
if(head==NULL||head->next==NULL)
return head;
p1=head;
p2=p1->next;
while(p2!=NULL)
{
p3=p2->next;
p2->next=p1;
p1=p2;
p2=p3;
}
head->next=NULL;
head=p1;
return (head);
}

2733

被折叠的 条评论
为什么被折叠?



