定义结点类型的类class node,数据域为整形,并定义单链表类class slist, 在slist中实现正向和反向插入结点的功能、州除结点功能和输出链表所有成员数据域的功能,在主两数中测试结点插入功能,建立单向链表,输出单 向链表和州除所有结点,然后再输出所有结点。
时间: 2024-05-13 14:17:24 浏览: 39
以下是实现上述功能的代码:
```cpp
#include <iostream>
using namespace std;
class node{
public:
int data;
node* next;
node(int d): data(d), next(nullptr) {}
};
class slist{
public:
slist(): head(nullptr) {}
void insertFront(int d){
node* newNode = new node(d);
newNode->next = head;
head = newNode;
}
void insertBack(int d){
node* newNode = new node(d);
if(head == nullptr){
head = newNode;
}
else{
node* curr = head;
while(curr->next != nullptr){
curr = curr->next;
}
curr->next = newNode;
}
}
bool remove(int d){
if(head == nullptr){
return false;
}
if(head->data == d){
node* temp = head;
head = head->next;
delete temp;
return true;
}
node* curr = head;
while(curr->next != nullptr && curr->next->data != d){
curr = curr->next;
}
if(curr->next == nullptr){
return false;
}
node* temp = curr->next;
curr->next = curr->next->next;
delete temp;
return true;
}
void print(){
node* curr = head;
while(curr != nullptr){
cout << curr->data << " ";
curr = curr->next;
}
cout << endl;
}
void printReverse(){
printReverseHelper(head);
cout << endl;
}
private:
node* head;
void printReverseHelper(node* curr){
if(curr == nullptr){
return;
}
printReverseHelper(curr->next);
cout << curr->data << " ";
}
};
int main(){
slist list;
list.insertFront(3);
list.insertFront(2);
list.insertFront(1);
list.print(); // output: 1 2 3
list.insertBack(4);
list.print(); // output: 1 2 3 4
list.remove(2);
list.print(); // output: 1 3 4
list.printReverse(); // output: 4 3 1
return 0;
}
```
在上述代码中,我们实现了单链表类 `slist`,其中包含了正向插入结点的函数 `insertFront`,反向插入结点的函数 `insertBack`,州除结点的函数 `remove`,输出链表所有成员数据域的函数 `print`,以及输出链表所有成员数据域的反向顺序的函数 `printReverse`。在主函数中,我们测试了这些函数的功能,并且最终输出了链表所有成员数据域的反向顺序。
阅读全文