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

删除链表的节点

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-16 22:00
武汉大学 C++
幸福的小熊猫想要offer:我阿里投的 c++岗,面试官说自己是做 java 的,c++这辈子才有了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务