编写函数bool Delx(LinkList head,DataType x),删除带头结点单链表head中第一个值为x的结点。并构造测试用例进行测试 c++
时间: 2024-09-24 19:06:57 浏览: 22
在C++中,你可以编写一个名为`Delx`的函数,它接受一个带头结点的链表`head`以及一个数据类型`DataType`作为参数,用于从链表中删除第一个值为`x`的节点。如果链表中存在这样的节点,则返回`true`;否则,如果链表为空或者没有找到值为`x`的节点,返回`false`。以下是函数的基本实现:
```cpp
#include <iostream>
using namespace std;
// 假设链表节点结构如下
struct Node {
DataType data;
Node* next;
};
// 删除值为x的节点并返回是否成功
bool Delx(Node*& head, DataType x) {
if (head == nullptr) { // 如果链表为空,直接返回false
return false;
}
if (head->data == x) { // 如果头节点就是目标节点
Node* temp = head;
head = head->next; // 更新头节点指向下一个节点
delete temp; // 释放原头节点的内存
return true;
} else {
Node* current = head;
while (current->next != nullptr && current->next->data != x) {
current = current->next;
}
if (current->next != nullptr) { // 找到目标节点,删除它
Node* temp = current->next;
current->next = current->next->next;
delete temp;
return true;
}
}
return false; // 没有找到值为x的节点
}
// 测试用例
void testDelx() {
// 构造链表:1 -> 2 -> 3 -> 4 -> 5 (x = 3)
Node* listHead = new Node{1, nullptr};
listHead->next = new Node{2, nullptr};
listHead->next->next = new Node{3, nullptr};
listHead->next->next->next = new Node{4, nullptr};
listHead->next->next->next->next = new Node{5, nullptr};
bool result = Delx(listHead, 3);
cout << "Delete node with value 3? " << (result ? "Success" : "Failed") << endl;
// 清理内存
Node* temp = listHead;
while (temp != nullptr) {
Node* nextTemp = temp->next;
delete temp;
temp = nextTemp;
}
}
int main() {
testDelx();
return 0;
}
```