介绍
在编程中,处理链表是一个基本的技能,本位主要介绍如何删除特定的节点。这是一个非常常见的操作。
问题陈述
给定一个单链表,我们需要实现一个函数,该函数接受一个值作为输入,并在链表中删除具有该值的所有节点。最终,我们将返回修改后的链表。
解决方案
我们将通过遍历链表来找到并删除目标值的节点。具体来说,我们将保持两个指针:一个用于当前节点,另一个用于追踪前一个节点。当我们找到目标值时,我们将通过修改前一个节点的next指针来删除当前节点。
算法
- 初始化一个指向头节点的指针current和一个指向前一个节点的指针prev,并将它们都指向头节点。
- 遍历链表,直到当前节点为空。
- 如果当前节点的值等于目标值,则:
- 将前一个节点的next指针指向当前节点的下一个节点。
- 释放当前节点的内存。
- 将当前节点指针移动到下一个节点。
- 否则,更新prev指针为当前节点,将当前节点指针移动到下一个节点。
- 返回修改后的链表。
代码实现
#include <bits/stdc++.h>
using namespace std;
struct Node {
int data;
Node* next;
Node(int val) : data(val), next(nullptr) {}
};
class LinkedList {
private:
Node* head;
public:
LinkedList() : head(nullptr) {}
void append(