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
的成员函数,用于从单链表中删除指定值的所有节点。以下是代码的主要逻辑:
removeElements
函数接受两个参数:指向链表头部的指针ListNode* head
和要删除的整数值int val
。函数在删除元素后返回修改后链表的头指针。函数首先检查头节点是否与要删除的值匹配。如果匹配,则迭代删除头节点,直到头节点的值不再匹配指定的值。
处理完头节点后,函数遍历剩余的链表部分。如果遇到节点的值与指定的值匹配,则通过调整指针来删除该节点。否则,移动到下一个节点。
最后,函数返回修改后的链表的头指针。
以下是代码各部分的简要说明:
在删除头节点的循环中,函数检查头节点是否存在(
head != NULL
),并且其值是否与指定的值匹配(head->val == val
)。在循环内部,将head
赋值为下一个节点,并删除先前的头节点。在删除非头节点的循环中,函数遍历链表(
cur != NULL && cur->next != NULL
)。如果下一个节点的值与指定的值匹配,则调整指针以跳过该节点并删除它。否则,移动到下一个节点。最后,函数返回修改后的头指针。
此代码有效地从链表中删除所有指定值的节点,并返回修改后的链表。但是,请确保
ListNode
类在代码的其他部分正确定义和初始化,以使此实现正常工作。