【问题描述】
输入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之后输出剩余整数。
#include <iostream>
struct Node {
int data;
Node* next;
};
Node* insertNode(Node* head, int value) {
Node* newNode = new Node;
newNode->data = value;
newNode->next = head;
return newNode;
}
Node* deleteNode(Node* head, int value) {
Node* current = head;
Node* previous = nullptr;
// 找到待删除节点
while (current != nullptr) {
if (current->data == value) {
break;
}
previous = current;
current = current->next;
}
// 若找到了待删除节点
if (current != nullptr) {
// 若待删除节点是头节点
if (previous == nullptr) {
head = head->next;
} else {
previous->next = current->next;
}
delete current;
}
return head;
}
void printList(Node* head) {
Node* current = head;
while (current != nullptr) {
std::cout << current->data << " ";
current = current->next;
}
std::cout << std::endl;
}
int main() {
Node* head = nullptr;
int num;
// 输入n(n>1)个正整数,将其插入链表头部
while (true) {
std::cin >> num;
if (num == -1) {
break;
}
head = insertNode(head, num);
}
// 输入要删除的正整数
int deleteNum;
std::cin >> deleteNum;
// 在链表中查找并删除对应的节点
head = deleteNode(head, deleteNum);
// 输出链表中所有节点的值
printList(head);
// 释放链表空间
Node* current = head;
while (current != nullptr) {
Node* temp = current;
current = current->next;
delete temp;
}
return 0;
}