4)假设有如下链表结点类listnode和链表类list,请设计链表类list的必要成员数据和成员函数,例如链表结点的添加、删除等。在主函数中,人为由整型数组构造一个链表,并实现链表整数序列的反向输出。 class listnode { int data; listnode *next; }; class list { listnode *head; };
时间: 2024-03-03 16:49:48 浏览: 60
链表的建立与结点的删除
链表类list的必要成员数据应包括链表头指针head。成员函数应该包括链表的构造函数、析构函数、节点的插入、删除和反向输出等操作。
具体实现如下:
```c++
#include <iostream>
using namespace std;
class listnode {
public:
int data;
listnode *next;
};
class list {
public:
listnode *head;
//构造函数
list() {
head = NULL;
}
//析构函数
~list() {
listnode *p = head;
while (p != NULL) {
listnode *temp = p;
p = p->next;
delete temp;
}
head = NULL;
}
//节点的插入
void insert(int value) {
listnode *newnode = new listnode;
newnode->data = value;
newnode->next = head;
head = newnode;
}
//节点的删除
void remove(int value) {
listnode *p = head;
if (p == NULL) {
return;
}
if (p->data == value) {
head = p->next;
delete p;
return;
}
while (p->next != NULL) {
if (p->next->data == value) {
listnode *temp = p->next;
p->next = p->next->next;
delete temp;
return;
}
p = p->next;
}
}
//反向输出
void reverse_print() {
listnode *p = head;
int *array = new int[100];
int i = 0;
while (p != NULL) {
array[i++] = p->data;
p = p->next;
}
for (int j = i - 1; j >= 0; j--) {
cout << array[j] << " ";
}
cout << endl;
delete[] array;
}
};
int main() {
int arr[] = { 1,2,3,4,5 };
list l;
for (int i = 0; i < 5; i++) {
l.insert(arr[i]);
}
l.reverse_print();
return 0;
}
```
在主函数中,我们构造了一个整型数组,并将其插入链表中。然后调用链表类的reverse_print函数,将链表中的整数序列反向输出。
阅读全文