编写函数bool Delx(LinkList head,DataType x),删除带头结点单链表head中第一个值为x的结点。并构造测试用例进行测试
时间: 2024-09-23 15:14:29 浏览: 66
Cocos2d-x中获取系统时间和随机数实例
在编写函数`Delx(LinkList head, DataType x)`时,这个函数的目的是从给定的带头结点的单链表`head`中删除第一个值等于`x`的节点。`LinkList`通常是一个链表结构体,包含一个数据元素`data`和指向下一个节点的指针`next`。函数接受两个参数:链表头`head`和需要查找并删除的值`x`。
以下是可能的函数实现(假设`LinkList`和`DataType`已经定义好了):
```cpp
// 如果链表为空,直接返回
if (head == nullptr || head->data != x) {
return head;
}
// 如果链表只有一个元素且该元素是要删除的,设置头节点为nullptr
if (head->next == nullptr) {
delete head; // 释放内存
head = nullptr;
} else {
// 找到要删除节点的前一个节点
LinkList* pre = head;
while (pre->next != nullptr && pre->next->data == x) {
pre = pre->next;
}
// 删除节点
if (pre->next != nullptr) {
pre->next = pre->next->next;
delete pre->next; // 释放内存
}
}
return head;
```
**测试用例:**
1. **空链表**: 输入`head = nullptr` 和 `x = 5`, 预期输出仍为`nullptr`,因为链表为空,没有找到值为5的节点。
2. **只有一节点**: 输入`head = new Node(5);` 和 `x = 5`, 预期输出`nullptr`,因为仅有一个节点且其值为5,所以整个链表被删除了。
3. **有多个节点,其中一个匹配**: 输入`head = new Node(1)->next = new Node(2)->next = new Node(5);` 和 `x = 5`, 预期输出`new Node(1)->next = new Node(2)`,即删除了值为5的节点。
4. **所有节点值都为x**: 输入`head = new Node(x)->next = new Node(x)->next = new Node(x);` 和 `x = x`, 预期输出`nullptr`,因为链表中所有节点都被删除了。
阅读全文