117.移除链表元素(力扣)

题目描述

代码解决

class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        //删除头节点
        while(head!=NULL&&head->val==val){
            ListNode*tmp=head;
            head=head->next;
            delete tmp;
        }
        //删除非头节点
        ListNode*cur=head;
        while(cur!=NULL&&cur->next!=NULL){
            if(cur->next->val==val)
            {
                ListNode*tmp=cur->next;
                cur->next=cur->next->next;
                delete tmp;
            }
            else
            {
                cur=cur->next;
            }
        }
        return head;
    }
};

代码思路 

这段 C++ 代码定义了一个名为 Solution 的类,其中包含一个名为 removeElements 的成员函数,用于从单链表中删除指定值的所有节点。以下是代码的主要逻辑:

  1. removeElements 函数接受两个参数:指向链表头部的指针 ListNode* head 和要删除的整数值 int val。函数在删除元素后返回修改后链表的头指针。

  2. 函数首先检查头节点是否与要删除的值匹配。如果匹配,则迭代删除头节点,直到头节点的值不再匹配指定的值。

  3. 处理完头节点后,函数遍历剩余的链表部分。如果遇到节点的值与指定的值匹配,则通过调整指针来删除该节点。否则,移动到下一个节点。

  4. 最后,函数返回修改后的链表的头指针。

以下是代码各部分的简要说明:

  • 在删除头节点的循环中,函数检查头节点是否存在(head != NULL),并且其值是否与指定的值匹配(head->val == val)。在循环内部,将 head 赋值为下一个节点,并删除先前的头节点。

  • 在删除非头节点的循环中,函数遍历链表(cur != NULL && cur->next != NULL)。如果下一个节点的值与指定的值匹配,则调整指针以跳过该节点并删除它。否则,移动到下一个节点。

  • 最后,函数返回修改后的头指针。

此代码有效地从链表中删除所有指定值的节点,并返回修改后的链表。但是,请确保 ListNode 类在代码的其他部分正确定义和初始化,以使此实现正常工作。