利用链表输入多个数,遍历一次,在删除某个数,在遍历一次
时间: 2024-05-16 18:14:22 浏览: 43
以下是利用链表实现输入多个数、遍历、删除某个数、再遍历的示例代码。假设需要删除的数为x:
```c++
#include <iostream>
using namespace std;
struct Node {
int val;
Node* next;
Node(int v) : val(v), next(nullptr) {}
};
void insert(Node*& head, int val) {
Node* newNode = new Node(val);
if (head == nullptr) {
head = newNode;
} else {
Node* curr = head;
while (curr->next != nullptr) {
curr = curr->next;
}
curr->next = newNode;
}
}
void traverse(Node* head) {
Node* curr = head;
while (curr != nullptr) {
cout << curr->val << " ";
curr = curr->next;
}
cout << endl;
}
void remove(Node*& head, int x) {
if (head == nullptr) return;
if (head->val == x) {
Node* temp = head;
head = head->next;
delete temp;
return;
}
Node* curr = head;
while (curr->next != nullptr && curr->next->val != x) {
curr = curr->next;
}
if (curr->next != nullptr) {
Node* temp = curr->next;
curr->next = curr->next->next;
delete temp;
}
}
int main() {
Node* head = nullptr;
int n;
cout << "Enter the number of elements: ";
cin >> n;
cout << "Enter " << n << " elements: ";
for (int i = 0; i < n; i++) {
int val;
cin >> val;
insert(head, val);
}
cout << "Original list: ";
traverse(head);
int x;
cout << "Enter the element to be removed: ";
cin >> x;
remove(head, x);
cout << "List after removing " << x << ": ";
traverse(head);
return 0;
}
```
这段代码首先定义了一个链表的结构体Node,包含一个整数val和一个指向下一个节点的指针next。然后定义了三个函数:insert用于在链表末尾插入一个节点;traverse用于遍历整个链表并输出每个节点的值;remove用于删除链表中的某个节点。
在主函数中,首先输入n表示元素个数,再输入n个元素,然后遍历整个链表并输出;接着输入需要删除的元素x,并调用remove函数删除;最后再遍历一次链表并输出。
需要注意的是,这里的链表是单向链表,如果需要实现双向链表需要对Node结构体进行修改。此外,代码没有进行内存泄露处理,实际使用中需要注意。
阅读全文