编写函数boo1 Delx(LinkList head,DataType x),删除带头结点单链表head中第一个值为x的结点。并构造测试用例进行测试
时间: 2024-09-23 08:12:30 浏览: 46
在C语言中,我们可以定义一个`Delx`函数来删除链表中值为`x`的第一个节点。首先,我们需要创建一个`LinkList`结构体来表示链表节点,其中包含一个数据域`data`和一个指向下一个节点的指针`next`。
```c
typedef struct Node {
DataType data;
struct Node* next;
} LinkList;
// 定义函数Delx
LinkList* Delx(LinkList* head, DataType x) {
if (head == NULL || head->data != x) { // 如果链表为空或头节点不是要删除的元素
return head;
}
LinkList* temp = head; // 创建临时变量,用于保存当前节点
while (temp->next != NULL && temp->next->data == x) { // 遍历链表,直到找到不等于x的节点
temp = temp->next;
}
if (temp->next == NULL) { // 如果所有节点都是x,那么整个链表就是我们要删除的
return NULL;
}
temp->next = temp->next->next; // 更新头节点的next指针,跳过被删除的节点
free(temp); // 如果删除的是头节点(temp==head),释放temp避免内存泄漏
return head;
}
```
为了测试这个函数,你可以构建以下测试用例:
1. **空链表** - 输入空链表,检查函数是否正确返回NULL。
2. **只有一个节点** - 创建链表只含一个节点,其值为`x`,调用`Delx`后检查链表是否为空。
3. **多个相同值的节点** - 创建链表包含多个值为`x`的节点,调用`Delx`后检查链表中的这些节点是否都被删除。
4. **不同值的节点** - 创建链表包含一个值为`x`的节点和其它不同值的节点,调用`Delx`后检查链表是否保持不变,除了`x`之外。
**测试用例示例**:
```c
// 测试用例
void test_Delx() {
LinkList* list = createLinkedList(); // 创建一个列表,例如 [1, 2, 3, 2, 4]
list = Delx(list, 2); // 删除值为2的节点
printLinkedList(list); // 打印删除后的链表
}
// 创建一个链表等价于上述例子
LinkList* createLinkedList() {
// ... 代码实现链表的创建 ...
}
```
阅读全文