题解 | #从单向链表中删除指定值的节点#

从单向链表中删除指定值的节点

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

#include"stdio.h"
#include"stdlib.h"


typedef struct node{
    int val;
    struct node* next;
}Lnode;



int main()
{
    int n ,h, a, b, del;
    scanf("%d%d", &n, &h);
    Lnode *p, *q;
    Lnode* head = (Lnode*)malloc(sizeof(Lnode));
    head->val = h;
    head->next = NULL;
    while(n-- > 1)
    {
        scanf("%d%d", &a, &b);
        Lnode* temp = (Lnode*)malloc(sizeof(Lnode));
        temp->val = a;
        temp->next = NULL;
        p = head;
        while(p->val != b)
            p = p->next;
        temp->next = p->next;
        p->next = temp;
    }
    // q = head;
    // while(q != NULL)
    // {
    //     printf("%d ",q->val);
    //     q = q->next;
    // }
    scanf("%d", &del);
    while(head->val == del)
    {
        head = head->next;
    }
    for(p = head; p->next!= NULL; p = p->next)
    {
        if(p->next->val == del)
        {
            q = p->next;
            p->next = p->next->next;
            free(q);
        }
    }
    while(head != NULL)
    {
        printf("%d ",head->val);
        head = head->next;
    }

    return 0;
}

感觉用下面的

while(head->val == del)

{

head = head->next;

}

来删除前面重复的结点的方法还是比较好的

还有上面的for循环中的 p->next!= NULL

是为了配合后面的if(p->next->val == del)

全部评论

相关推荐

野猪不是猪🐗:把你的学校加黑,加粗,斜体,下划线,描边,内阴影,内发光,投影,外发光,再上渐变色,居中,放大到最大字号,再把简历里其它内容删了,就行了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务