题解 | #牛牛的链表删除#

牛牛的链表删除

https://www.nowcoder.com/practice/d3df844baa8a4c139e103ca1b1faae0f

//数据结构 删除结点(+尾插法)


#include<stdio.h>
#include<stdlib.h>

typedef struct LNode{
    int data;                    //存放元素值
    struct LNode *next;          //指向后继节点
}LNode,*Linklist;

//尾插法 
Linklist Creat_list(int count){
    Linklist head = (Linklist)malloc(sizeof(LNode));        //定义头指针
    Linklist node=NULL;                                    //定义工作指针
    Linklist end=NULL;                                    //定义尾指针
    head->next = NULL;
    end=head;
//    int count,m;
    int data;                                            //存放当前结点数据
//    scanf("%d",&count);                                    //存放数组长度
//    scanf("%d",&m);                                    //存放要删除的元素
    for(int i=0;i<count;i++){
        scanf("%d",&data);
//        if(data!=m){
        node = (LNode*)malloc(sizeof(LNode));
        node->data = data;                        //存放结点数据域
        end->next = node;                            //将新结点尾插到链表
        end = node;                                //更新尾结点
//        }
    }
    end->next = NULL;
    return head;
}

//删除结点
void del(LNode *L,int m){
    LNode *p=L,*q=L->next;
    while(q){
        if(q->data == m){
            p->next=q->next;
            free(q);
            q=p->next;
        }
        else{
            p=q; q=q->next;
        }
    }
}

void output(Linklist head){
    Linklist a = head->next;
    while(a){
        printf("%d",a->data);
        printf(" ");
        a=a->next;
    }
    
}

int main(){
    int n,m;
    scanf("%d",&n);
    scanf("%d",&m);
    Linklist head=Creat_list(n);
    del(head,m);
    output(head);
}

全部评论

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务