删除链表中指定成员 任务描述 提交记录 编程语:C++ 难度:中等 单个测试集评测时长限制:3秒 编程要求 完成函数 DeleteNodes 的编写,该函数从一个排序(从小到大)的链表中删除结点成员 num 大于指定值 data 的结点,并返回删除结点后的新链表。 测试举例 样例输入:8 2 4 7 13 18 22 23 31 19 样例输出:2 4 7 13 18
时间: 2024-01-02 19:02:24 浏览: 92
好的,我明白了你的问题。下面是一个简单的 C++ 代码实现,可以实现删除链表中指定成员的功能:
```cpp
#include <iostream>
using namespace std;
struct Node {
int val;
Node *next;
Node(int x) : val(x), next(NULL) {}
};
Node* DeleteNodes(Node* head, int data) {
Node dummy(0);
dummy.next = head;
Node* prev = &dummy;
Node* cur = head;
while (cur != NULL) {
if (cur->val > data) {
prev->next = cur->next;
delete cur;
cur = prev->next;
} else {
prev = cur;
cur = cur->next;
}
}
return dummy.next;
}
int main() {
int n, data;
cin >> n >> data;
Node* head = NULL;
for (int i = 0; i < n; ++i) {
int val;
cin >> val;
Node* node = new Node(val);
node->next = head;
head = node;
}
head = DeleteNodes(head, data);
while (head != NULL) {
cout << head->val << " ";
head = head->next;
}
cout << endl;
return 0;
}
```
这个函数的实现思路是利用两个指针 `prev` 和 `cur` 遍历链表,如果当前结点的值大于指定值 `data`,则将前一个结点的 `next` 指针指向当前结点的下一个结点,然后删除当前结点;否则,继续遍历链表。最后返回修改后的链表头结点即可。
你可以将要处理的数据输入到程序中进行测试,看看是否符合预期结果。
阅读全文