C语言之链表操作

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);

  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值