1️⃣2️⃣ 链表
😖 反转感觉很难,要多加练习
#include <iostream>
using namespace std;
class List{
private:
struct Node{
int data;
Node* next;
Node(int d){
data = d;
next = 0;
}
};
Node* head;
public:
List();
~List();
void Insert(const int i);
void Delete (const int i);
void Reverse();
void Show()const;
};
List::List(){
head = 0;
}
List::~List(){
while(head){
Node* p = head->next;
delete head;
head = p;
}
}
void List::Insert(const int i){
Node* p = new Node(i);
p->next = head;
head = p;
}
void List::Delete(const int i){
Node* p = head;
Node* q=0; //用来保存被删除的节点的前一个节点地址
while(p&&p->data != i){
q = p;
p = p->next;
}
if(p){
if(q) q->next = p->next;
else head = head->next;
delete p;
}
}
void List::Reverse(){
Node* p = head;
Node* q = 0;
while(p){
Node* r = q;
q = p;
p = p->next;
q->next = r;
}
head = q;
}
void List::Show()const{
Node* p = head;
while(p){
cout << p->data << " " ;
p = p->next;
}
}
int main() {
List l1;
l1.Insert(1);
l1.Insert(2);
l1.Insert(3);
l1.Insert(4);
l1.Show(); cout << endl;
l1.Reverse();
l1.Show(); cout << endl;
l1.Delete(2);
l1.Show(); cout << endl;
l1.Reverse();
l1.Show();
return 0;
}