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

删除链表的节点

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;
}

全部评论

相关推荐

2024-12-26 13:00
太原理工大学 Java
会飞的猿:简历没啥大问题啊,感觉是缺少了实习经历。多投投先找个中小厂过渡一下吧
点赞 评论 收藏
分享
01-07 15:50
四川大学 Java
看日出看日落:好好背八股,做算法。我身边跟你bg差不多的基本都大厂暑期
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务