KiKi学习了结构体和指针,他了解了结构体类型可以定义包含多个不同类型成员,而指针本质是内存地址,是引用数据的另外一种方式。现在他想将多个输入的数据通过结构体和指针的方式连接在一起,形成一个单向链表,即:每个结点是结构体类型,包括整型数据成员(data)和结构体指针类型成员(next),每个结点的指针部分指向下一个输入的结点。具体建立过程如下:先输入n个整数,按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除。输出删除后的单链表信息。
输入描述:
包括三行:
第一行输入数据个数n (3≤n≤100);
第二行依次输入n个整数,用空格分隔;
第三行输入欲删除数据m。
输出描述:
包括两行:
第一行输出完成删除后的单链表长度;
第二行依次输出完成删除后的单链表数据。
代码如下:
#include <iostream>
struct Node {
int data;
Node* next;
};
int main() {
int n;
std::cin >> n;
Node* head = new Node();
head->next = nullptr;
Node* tail = head;
for (int i = 0; i < n; ++i) {
int value;
std::cin >> value;
Node* newNode = new Node();
newNode->data = value;
newNode->next = nullptr;
tail->next = newNode;
tail = newNode;
}
int m;
std::cin >> m;
int count = 0;
Node* prev = head;
Node* curr = head->next;
while (curr != nullptr) {
if (curr->data == m) {
count++;
prev->next = curr->next;
delete curr;
curr = prev->next;
} else {
prev = curr;
curr = curr->next;
}
}
std::cout << n - count << std::endl;
curr = head->next;
while (curr != nullptr) {
std::cout << curr->data << " ";
curr = curr->next;
}
std::cout << std::endl;
delete head;
return 0;
}