定义linklistdatatype,编写函数bool Delx(LinkList head,DataType x),删除带头结点单链表head中第一个值为x的结点。并构造测试用例进行测试
时间: 2024-09-23 12:13:55 浏览: 44
LinkList是一种数据结构,通常称为链表,它由一系列节点组成,每个节点包含一个数据元素(DataType类型)和指向下一个节点的指针。Delx函数的作用是在给定的带头结点的单链表(head)中删除第一个值等于x的节点,并返回布尔值来表示操作是否成功。
首先,我们需要定义一个LinkList的结构体:
```cpp
struct Node {
DataType data;
struct Node* next;
};
typedef struct Node LinkList;
```
然后定义Delx函数:
```cpp
// bool Delx(LinkList* head, DataType x)
bool Delx(LinkList* head, DataType x) {
if (head == nullptr) // 如果链表为空,直接返回false
return false;
if (head->data == x) { // 如果头节点就是我们要删除的节点
LinkList* temp = head; // 创建临时指针
head = head->next; // 更新头指针到下一个节点
delete temp; // 释放头节点
return true;
}
LinkList* current = head;
while (current->next != nullptr && current->next->data != x) { // 遍历链表,直到找到目标节点或遍历结束
current = current->next;
}
if (current->next == nullptr) // 没有找到值为x的节点,说明不存在,返回false
return false;
current->next = current->next->next; // 删除找到的节点
delete current->next; // 释放内存
return true;
}
```
接下来,我们可以构建一些测试用例来验证这个函数:
```cpp
void testDelx() {
// 测试用例1:空链表
LinkList* empty_list = new LinkList();
assert(!Delx(empty_list, 5)); // 预期结果:删除失败
// 测试用例2:只有一个节点的链表
LinkList* single_node = new Node{10, nullptr};
assert(Delx(single_node, 10)); // 预期结果:删除成功,链表变为空
// 测试用例3:有多个节点,其中一个为x
LinkList* multi_node_list = new Node{1, nullptr};
multi_node_list->next = new Node{2, nullptr};
multi_node_list->next->next = new Node{5, nullptr}; // 第二个节点值为x
assert(Delx(multi_node_list, 5)); // 预期结果:删除成功,第二个节点被删
// 更多测试...
}
int main() {
testDelx(); // 运行测试
return 0;
}
```
阅读全文