c++完成函数 DeleteNodes 的编写,该函数从一个排序(从小到大)的链表中删除结点成员 num 大于指定值 data 的结点,并返回删除结点后的新链表。 测试举例 样例输入:8 2 4 7 13 18 22 23 31 19 样例输出:2 4 7 13 18
时间: 2024-02-15 13:03:33 浏览: 52
用C++编程实现链表删除某结点
5星 · 资源好评率100%
好的,这里是一个可能的实现:
```c++
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* DeleteNodes(ListNode* head, int data) {
ListNode dummy(0);
dummy.next = head;
ListNode* prev = &dummy;
ListNode* curr = head;
while (curr) {
if (curr->val > data) {
prev->next = curr->next;
delete curr;
curr = prev->next;
} else {
prev = curr;
curr = curr->next;
}
}
return dummy.next;
}
```
具体实现中,我们首先创建了一个虚拟头节点 `dummy`,并将其指向原链表的头节点 `head`。接下来,我们使用两个指针 `prev` 和 `curr` 遍历链表,其中 `prev` 指向当前节点的前一个节点,`curr` 指向当前节点。
如果当前节点的值大于指定值 `data`,则将其从链表中删除,并将 `prev` 指向当前节点的下一个节点;否则,将 `prev` 指向当前节点,并将 `curr` 指向下一个节点。
最后,返回虚拟头节点 `dummy` 的下一个节点,即为删除结点后的新链表。
阅读全文