题解 | #删除链表的节点#

删除链表的节点

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

struct ListNode* deleteNode(struct ListNode* head, int val) {
    // 添加一个头结点指针
    struct ListNode* res = (struct ListNode*)malloc(sizeof(struct ListNode));
    res->next = head;
    struct ListNode* pre = res; // 前序节点
    struct ListNode* cur = head; // 当前节点

    while (cur != NULL) {
        // 注意:要先进性判断,防止链表第一个值就是 val 的情况
        if (cur->val == val) {
            pre->next = cur->next;  // 跳过,断开连接
            cur = cur->next; // 继续循环,删除所有匹配的节点
        } else {
            pre = cur;
            cur = cur->next;
        }
    }

    // 返回了从头节点之后开始的链表。因为 res->next 指向了真正链表的头部
    return res->next;
}

全部评论

相关推荐

03-31 16:42
已编辑
郑州西亚斯学院 后端
Java抽象带篮子:你简历少了几个模块看上去就感觉信息很少,简历怎么写可以看看我发的帖子
点赞 评论 收藏
分享
03-28 19:11
铜陵学院 C++
有礼貌的山羊追赶太阳:太典了,连笔试都没有开始就因为HC满了而结束了,而且还卡你不让你再投其他部门的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务