【问题描述】 输入n(n>1)个正整数,每次将输入的整数插入到链表头部。-1表示输入结束。再输入一个正整数,在链表中查找该数据并删除对应的节点。要求输出进行删除操作后链表中所有节点的值。 【输入形式】 输入以空格分隔的n个整数,以-1结束输入,再输入一个要删除的整数。 【输出形式】 从链表第一个元素开始,输出链表中所有的节点值。以空格分隔。 【样例输入】 2 4 6 7 8 4 -1 2 【样例输出】 4 8 7 6 4 【样例说明】 输入以空格分隔的n个整数2 4 6 7 8 4, 以-1结束输入 然后输入2,删除2之后输出剩余整数。 用c和c++写并解释
时间: 2024-03-12 21:44:28 浏览: 110
4.3_结构体_
5星 · 资源好评率100%
C++代码如下:
```c++
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* insertNode(ListNode* head, int val) {
ListNode* newNode = new ListNode(val);
newNode->next = head;
return newNode;
}
ListNode* deleteNode(ListNode* head, int val) {
if (head == NULL) {
return NULL;
}
if (head->val == val) {
ListNode* temp = head;
head = head->next;
delete temp;
return head;
}
ListNode* curr = head;
while (curr->next != NULL) {
if (curr->next->val == val) {
ListNode* temp = curr->next;
curr->next = curr->next->next;
delete temp;
return head;
}
curr = curr->next;
}
return head;
}
void printList(ListNode* head) {
ListNode* curr = head;
while (curr != NULL) {
cout << curr->val << " ";
curr = curr->next;
}
cout << endl;
}
int main() {
ListNode* head = NULL;
int val;
cin >> val;
while (val != -1) {
head = insertNode(head, val);
cin >> val;
}
cin >> val;
head = deleteNode(head, val);
printList(head);
return 0;
}
```
首先,定义一个链表节点的结构体`ListNode`,包括一个整数值`val`和一个指向下一个节点的指针`next`。然后,定义插入节点和删除节点的两个函数`insertNode`和`deleteNode`,分别实现在链表头插入节点和删除链表中满足特定值的节点。最后,定义打印链表的函数`printList`,用于输出链表中所有节点的值。
在主函数中,首先创建一个空链表头`head`,然后通过循环输入n个整数,并将它们插入到链表头部。输入-1表示输入结束。接下来,输入要删除的整数,并通过调用`deleteNode`函数删除对应的节点。最后,调用`printList`函数输出删除节点后链表中所有节点的值。
阅读全文