一、链表
1、链表及其基础功能实现
#include <iostream>
using namespace std; // 使用命名空间,避免每次都写 std::
struct Node{
int data;
struct Node* next;
};
//任意位置插入
void Insert(Node** head, int value, int n){
Node* temp = new Node();
temp -> data = value;
temp -> next = NULL;
if(n == 1){
temp -> next = *head;
*head = temp;
return;
}
Node* temp1 = new Node();
temp1 = *head;
for(int i = 0; i < n -2; i++){
if (temp1 == NULL || temp1 -> next == NULL){
delete temp1;
return;
}
temp1 = temp1 -> next;
}
temp -> next = temp1 -> next;
temp1 -> next = temp;
}
void DeleteNode(Node** head, int n){
Node* temp1 = *head;
if(temp1 == NULL){
return;
}
if(n == 1){
*head = temp1 -> next;
delete temp1;
return;
}
for(int i = 0; i < n - 2; i++){
temp1 = temp1 -> next;
}
Node* temp2 = temp1 -> next;
temp1 -> next = temp2 -> next;
delete temp2;
}
void Print(Node* head){
Node* temp = head;
while(temp != NULL){
cout << temp -> data << endl;
temp = temp -> next;
}
}
int main(){
Node* head = NULL;
Insert(&head, 1, 1);//传输head的地址
Insert(&head, 2, 2);
Insert(&head, 3, 3);
DeleteNode(&head, 2);
Print(head);
return 0;
}
2、翻转一个链表
#include<iostream>
using namespace std;
struct Node{
int data;
Node* next;
};
Node* head = NULL;
//末尾插入
void Insert(int data){
Node* temp = new Node;
temp -> data = data;
temp -> next = NULL;
if(head == NULL){
head = temp;
return;
}
Node* tempPre = head;
while(tempPre -> next != NULL){
tempPre = tempPre -> next;
}
tempPre -> next = temp;
}
//打印
void Print(){
Node* temp = head;
while(temp != NULL){
cout << temp -> data;
temp = temp -> next;
}
}
//翻转
void Reverse(){
Node* preNode = NULL;
Node* nowNode = head;
Node* nextNode = NULL;
while(nowNode != NULL){
nextNode = nowNode -> next;
nowNode -> next = preNode;
preNode = nowNode;
nowNode = nextNode;
}
head = preNode;
}
int main(){
Insert(2);
Insert(5);
Insert(0);
Print();
Reverse();
Print();
// 这里没有return语句,但相当于return 0;
}
3、打印链表(递归)
4、翻转链表(递归)
示例:
如果改为head不是全局变量则:
#include<iostream>
using namespace std;
struct Node{
int data;
Node* next;
};
void Insert(Node** head, int data){
Node* temp1 = new Node();
temp1 -> data = data;
temp1 -> next = NULL;
if(*head == NULL){
*head = temp1;
return;
}
Node* temp2 = *head;
while(temp2 -> next != NULL){
temp2 = temp2 -> next;
}
temp2 -> next = temp1;
}
void Print(Node** head){
Node* temp = new Node();
temp = *head;
if(temp == NULL){
cout << "空链表" << endl;
return;
}
while(temp != NULL){
cout << temp -> data << " ";
temp = temp -> next;
}
}
void ReversePrint(Node* head){
Node* temp = head;
if(temp == NULL){
return;
}
ReversePrint(temp -> next);
cout << temp -> data << " ";
return;
}
int main(){
Node* head = NULL;
Insert(&head, 2);
Insert(&head, 4);
// Print(&head);
ReversePrint(head);
}