双链表操作 written by my self

来源:互联网 发布:快速优化软件 编辑:程序博客网 时间:2024/04/29 17:15

struct student

{

      int data;

      struct student *next;

      struct student *pre;

}dnode;


1, 删除节点

dnode *del(dnode *head, int num)

{

      dnode *p1;

      p1=head;

      while(p1->data!=num&&p1->next!=NULL)

       {p1=p1->next;}

       if(num == p1->data)

       {

            if(p1==head)

            {

                 head = head->next;

                 head->pre=NULL

                 free(p1);

            }

            else if(p1->next==NULL)

            {

                  p1->pre->next=NULL;

                  free(p1);

            }

            else

             {

                   p1->next->pre=p1->pre;

                   p1->pre->next = p1->next;

                   free(p1);

             }

        }

        else

             printf("%d is not found",num);


        return head;

}


2, 插入节点

dnode *insert(dnode *head, int num)

{

     dnode *p1, *p0;

     p1=head;

     p0=(dnode *)malloc(sizeof(dnode));

     p0->data=num;

     while(p0->data>p1->data&&p1->next!=NULL)

     {

          p1=p1->next;

     }

     if(p0->data<=p1->data)

     {

           if(head == p1)

           {

                p0->next = p1;

                p1->pre = p0;

                head = p0;

           }

           else

           {

               p1->pre->next = p0;

               p0->next = p1;

               p0->pre = p1->pre;

               p1->pre = p0;

           }

     }

     else

     {

          p1->next = p0;

          p0->pre = p1;

          p0->next = NULL;

     }

     return head;

}

原创粉丝点击