指针Node*next,指向指针的指针Node**prev的单向列表增删改查代码
时间: 2024-10-08 16:26:35 浏览: 39
c语言实现单向链表.
在C++中,我们可以使用指针和指针的指针来实现单向链表的操作,包括增删改查。这里是一个简单的例子,我们将创建一个`ListNode`结构体作为节点,以及一些基本操作的函数:
```cpp
#include <iostream>
// 定义链表节点
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
// 指向指针的指针用于双向链表,但在单向链表中仅需一个next指针
ListNode* prev; // 单向链表不需要prev指针
// 添加新节点到链表尾部
void addNode(int val) {
ListNode* newNode = new ListNode(val);
if (!prev) { // 如果链表为空,prev也应为nullptr
prev = newNode;
}
newNode->next = prev->next;
prev->next = newNode;
}
// 删除指定值的节点
void deleteNode(int val) {
ListNode* current = prev->next;
while (current != nullptr) {
if (current->val == val) {
if (current == prev->next) { // 节点位于链表头部
prev->next = current->next;
} else { // 节点位于中间或尾部
ListNode* temp = current->next;
current->next = temp->next;
delete temp;
}
return;
}
prev = current;
current = current->next;
}
std::cout << "Value not found!" << std::endl;
}
// 修改节点值
void modifyNode(int oldVal, int newVal) {
ListNode* current = prev->next;
while (current != nullptr) {
if (current->val == oldVal) {
current->val = newVal;
break;
}
current = current->next;
}
if (current == nullptr) {
std::cout << "Old value not found!" << std::endl;
}
}
// 打印链表
void printList() {
ListNode* temp = prev->next;
while (temp != nullptr) {
std::cout << temp->val << " -> ";
temp = temp->next;
}
std::cout << "NULL" << std::endl;
}
阅读全文