单链表的插入与删除

一、单链表的结点插入

(1)插入的结点位于空链表

(2)插入的结点位于非空链表

  1.     插入的链表位于非空链表的头部
  2.     插入的链表为与非空链表的尾部
  3.     插入的链表位于非空链表的中间部分

创建一个单链表结点的插入函数,将输入的学生的序号作为排序,按照从小到大的学号顺序插入学生信息

sturct student *insert(struct student *head,struct student *new)  /*定义插入节点函数 */
{
        struct student *p1,*p2,*pnew;
        p1 = p2 = head;
        pnew = new;
        if(head == NULL){
                head = pnew ;
                pnew->next = NULL;
        }
        else{
                while((pnew->number > p1->number) && (p1->next !=NULL)){
                        p2 = p1;            /*  不断移动指针     */
                        p1 = p1->next;
                }
                if(pnew->number <= p1->number){   /*按照从小到大的学号排序  */
                        if(p1 == head)            /*判断插入位置是否是非空离链表的表头  */
                        { pnew->next = p1; head = pnew; }
                        else   /*插入位置位于链表中间*/
                        {p2->next = pnew;  pnew->next = p1;}
                }else{         /*插入位置位于链表的尾部  */
                        p1->next = pnew;
                        pnew = NULL ;
                }
        }

        return (head);
}

二、单链表的结点删除

(1)判断要删除的链表是否为空链表

(2)判断要删除的结点是位于链表的表头、中间还是表尾。

创建一个函数用于删除学生的信息,判断学号位于链表中的哪个位置,然后进行删除

(struct student *)delete(struct student *head,int number)  /* 删除链表结点的函数  */
{
        struct student *p1,*p2;
        p1 = p2 = head;

        if(p1 == NULL){
                printf("the list is empty\n");     /*输入的链表为空链表  */
        }else
        {
                while((number != p1->number) && (p1->next != NULL)){
                        p2 = p1;
                        p1 = p1->next;    /*不断移动指针,判断指向的结点是否为想要的结点   */
                }

                if((number == p1->number)) {
                        if(p1 == head ){
                                head = head->next;      /* 要删除的结点位于表头  */
                        }else{
                                p2->next = p1->next;   /* 要删除的结点位于中间或者表尾  */
                        }
                }else{
                        printf("Don't have find the number\n");  /*没有找到要删除的结点  */
                }
        }
        return (head);
}
  

猜你喜欢

转载自blog.csdn.net/cxyzyywoaini/article/details/88080125