链表删除链表的节点( leetcode18)

Posted AI 菌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表删除链表的节点( leetcode18)相关的知识,希望对你有一定的参考价值。

一、题目

给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
返回删除后的链表的头节点。

在这里插入图片描述
在这里插入图片描述

二、题解

本题是一道简单的套路题,首先回忆一下删除链表节点的操作:首先定义两个指针pre、curr;然后从首到尾遍历一次链表,如果要删除当前节点,只需要:pre->next = curr->next。

关键在于:head->val也有可能等于val,所以本题返回的不是head,而是第一个不等于val值的节点。具体做法也很简单,只需在遍历之前,加上:

while(head)
{        
     if(head->val == val)
         head = head->next;
     else
         break;
 }

三、实现

根据以上的分析,相应的C++实现如下:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* deleteNode(ListNode* head, int val) {
        while(head)
        {        
            if(head->val == val)
                head = head->next;
            else
                break;
        }
        //此时的head是第一个不等于val的节点
        ListNode* curr = head;
        ListNode* pre = curr;
        while(curr->next)
        {
            curr = curr -> next;
            if(curr->val==val) // 如果等于,则删除当前节点;但不更新pre,因为curr->next 也有可能是val
                pre->next = curr->next;
            else
                pre = curr; // 不相同,则更新pre
        }
        return head;
    }
};

以上是关于链表删除链表的节点( leetcode18)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 第18题 删除链表的倒数第N个节点

[LeetCode]剑指 Offer 18. 删除链表的节点

LeetCode(剑指 Offer)- 18. 删除链表的节点

LeetCode(剑指 Offer)- 18. 删除链表的节点

Leetcode刷题Python剑指 Offer 18. 删除链表的节点

leetcode-面试题18-删除链表的节点