编写函数删除不带头结点单链表head中的第一个值为x的结点,并构造测试用例进行测试
时间: 2023-05-19 12:04:58 浏览: 120
可以使用以下代码来删除不带头结点单链表head中的第一个值为x的结点:
```
void deleteNode(ListNode* head, int x) {
ListNode* prev = nullptr;
ListNode* curr = head;
while (curr != nullptr && curr->val != x) {
prev = curr;
curr = curr->next;
}
if (curr != nullptr) {
if (prev != nullptr) {
prev->next = curr->next;
} else {
head = curr->next;
}
delete curr;
}
}
```
测试用例可以包括以下情况:
- 删除的结点是头结点
- 删除的结点是尾结点
- 删除的结点是中间结点
- 删除的结点不存在
例如:
```
ListNode* head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
head->next->next->next = new ListNode(4);
deleteNode(head, 2); // 删除中间结点
deleteNode(head, 1); // 删除头结点
deleteNode(head, 4); // 删除尾结点
deleteNode(head, 5); // 删除不存在的结点
```
注意:在实际使用中,需要根据具体情况来确定是否需要传入头结点的指针。如果需要删除头结点,需要更新头结点的指针。
阅读全文