#include <iostream> using namespace std; template <class T> class Node { /********** Begin **********/ }; /********** End **********/ int main() { int a[10]; Node<int> n[10]; // cout << "输入10 个整数:" << endl; for (int i = 0; i < 10; i ++) { cin >> a[i]; } for (int i = 0; i < 9; i ++) { n[i].data = a[i]; n[i].insertAfter(&n[i+1]); } n[9].data = a[9]; Node<int>* np = &n[0]; while (np != NULL) { cout << np->data << ' '; np = np->nextNode(); } cout << endl; int f; // cout << "请输入要查找的数:"; cin >> f; Node<int> p(0, &n[0]); np = &p; while (np->nextNode() != NULL) { while (np->nextNode() != NULL && np->nextNode()->data == f) np->deleteAfter(); if(np->nextNode() != NULL) np = np->nextNode(); } // cout << "删除后的链表:" << endl; np = p.nextNode(); while (np != NULL) { cout << np->data << ' '; np = np->nextNode(); } np = &p; while (np->nextNode() != NULL) np->deleteAfter(); cout << endl; return 0; }
时间: 2024-04-28 16:24:16 浏览: 39
这是一个单向链表的实现,其中 Node 类是链表节点的模板类,包含数据成员和指向下一个节点的指针。在主函数中,先输入 10 个整数,然后将它们依次插入到链表中。接着遍历链表,输出链表中的所有元素。最后输入一个要查找的数,从链表中删除所有值等于该数的节点,并输出删除后的链表。
需要注意的是,这段代码中的链表实现是单向链表,每个节点只有指向下一个节点的指针,没有指向前一个节点的指针。因此,在删除节点时需要先找到当前节点的前一个节点,然后将它的指针指向当前节点的下一个节点,再将当前节点删除。如果只记录当前节点,找到前一个节点的操作会比较麻烦。
相关问题
#include <iostream>using namespace std;template <class T>class Node {/********** Begin **********/};/********** End **********/int main(){ int a[10]; Node<int> n[10]; // cout << "输入10 个整数:" << endl; for (int i = 0; i < 10; i ++) { cin >> a[i]; } for (int i = 0; i < 9; i ++) { n[i].data = a[i]; n[i].insertAfter(&n[i+1]); } n[9].data = a[9]; Node<int>* np = &n[0]; while (np != NULL) { cout << np->data << ' '; np = np->nextNode(); } cout << endl; int f; // cout << "请输入要查找的数:"; cin >> f; Node<int> p(0, &n[0]); np = &p; while (np->nextNode() != NULL) { while (np->nextNode() != NULL && np->nextNode()->data == f) np->deleteAfter(); if(np->nextNode() != NULL) np = np->nextNode(); } // cout << "删除后的链表:" << endl; np = p.nextNode(); while (np != NULL) { cout << np->data << ' '; np = np->nextNode(); } np = &p; while (np->nextNode() != NULL) np->deleteAfter(); cout << endl; return 0;}
这段代码是一个单向链表的实现。以下是完整的代码注释版:
```c++
#include <iostream>
using namespace std;
// 链表的节点类
template <class T>
class Node {
public:
T data; // 数据域
Node<T>* next; // 指针域
// 构造函数
Node(T data, Node<T>* next = NULL) {
this->data = data;
this->next = next;
}
// 在当前节点后插入一个节点
void insertAfter(Node<T>* p) {
p->next = this->next;
this->next = p;
}
// 删除当前节点的后继节点
void deleteAfter() {
if (next == NULL) {
return;
}
Node<T>* p = next;
next = p->next;
delete p;
}
// 获取下一个节点的指针
Node<T>* nextNode() {
return next;
}
};
int main() {
int a[10];
Node<int> n[10];
// 输入10个整数
for (int i = 0; i < 10; i++) {
cin >> a[i];
}
// 构造链表
for (int i = 0; i < 9; i++) {
n[i].data = a[i];
n[i].insertAfter(&n[i + 1]);
}
n[9].data = a[9];
// 遍历链表
Node<int>* np = &n[0];
while (np != NULL) {
cout << np->data << ' ';
np = np->nextNode();
}
cout << endl;
int f;
// 输入要查找的数
cin >> f;
// 删除数值等于f的节点
Node<int> p(0, &n[0]);
np = &p;
while (np->nextNode() != NULL) {
while (np->nextNode() != NULL && np->nextNode()->data == f) {
np->deleteAfter();
}
if (np->nextNode() != NULL) {
np = np->nextNode();
}
}
// 输出删除后的链表
np = p.nextNode();
while (np != NULL) {
cout << np->data << ' ';
np = np->nextNode();
}
// 释放链表内存
np = &p;
while (np->nextNode() != NULL) {
np->deleteAfter();
}
cout << endl;
return 0;
}
```
#include <iostream>template <class T>class Node {private: T data;public: Node* next; Node(); Node(const T& data, Node<T>* nt = 0);// Node(T data, Node<T>* n = NULL); T& getData();};template <class T>Node<T>::Node() { data = 0; next = NULL;}template <class T>Node<T>::Node(const T& d, Node<T>* nt) { data = d; next = nt;}template <class T>T& Node<T>::getData() { return data;}/********** Begin **********//** 在LinkedList的设计中,采用了附加指针front和rear,即链表的结构为front->a1->a2->...->rear* 只有在析构函数中才删除这两个指针,其余的时间这两个指针都是存在的,其中的数据始终为0,不存储用户数据*/template <class T>class LinkedList {};/********** End **********/using namespace std;int main(){ LinkedList<int> A, B; int i, item; // cout << "请输入加入链表A的五个整数:"; for (i = 0; i < 5; i ++) { cin >> item; A.insertRear(item); } // cout << "请输入加入链表B的五个整数:"; for (i = 0; i < 5; i ++) { cin >> item; B.insertRear(item); } // cout << endl << "有序链表A中的元素为:"; A.reset(); while(!A.endOfList()) { cout << A.data() << " "; A.next(); } cout << endl; // cout << endl << "有序链表B中的元素为:"; B.reset(); while(!B.endOfList()) { A.insertRear(B.data()); cout << B.data() << " "; B.next(); } cout << endl; // cout << endl << "加入链表B中元素后,链表A中的元素为:"; A.reset(); while(!A.endOfList()) { cout << A.data() << " "; A.next(); } cout << endl; return 0;}
这是一个 C++ 程序,主要实现了链表的基本操作,包括链表节点类 Node 和链表类 LinkedList。其中,链表节点类 Node 包含一个数据成员和一个指向下一个节点的指针,链表类 LinkedList 包含了两个附加指针 front 和 rear,用于指向链表的头和尾。这段程序的主要功能是,创建两个链表 A 和 B,将 B 中的元素插入到 A 的尾部,最后输出 A 的元素。
请问你还有什么问题吗?
阅读全文