#include
struct node
{
int value = -1;
node* next_ptr = nullptr;
};
//创建结点
void create(int i, node** header_ptr) {
node* current = header_ptr;
//第一个结点
if (current == nullptr) {
node ptr = new node;
ptr->value = i;
ptr->next_ptr = nullptr;
header_ptr = ptr;
}else {
while (current!= nullptr){
if (current->next_ptr == nullptr){
node ptr = new node;
ptr->value = i;
ptr->next_ptr = nullptr;
current->next_ptr = ptr;
break;
}
current = current->next_ptr;
}
}
}
//反转链表
void rever_list(node** header) {
if (header == nullptr){
return;
}
node* pre = nullptr;
node* header_ptr = header;
while (header_ptr != nullptr){
node temp_ptr = header_ptr->next_ptr;
header_ptr->next_ptr = pre;
pre = header_ptr;
header_ptr = temp_ptr;
}
*header = pre;
}
//插入链表(后插入法 )
void insert_list_back(node**header, int prev_value,int insert_value)
{
node* pre = header;
while (pre!= nullptr){
if (pre->value == prev_value){
node temp_ptr = new node();
temp_ptr->value = insert_value;
if (temp_ptr->next_ptr != nullptr){
temp_ptr->next_ptr = pre->next_ptr;
pre->next_ptr = temp_ptr;
}else {
pre->next_ptr = temp_ptr;
}
break;
}
pre = pre->next_ptr;
}
}
//插入链表(前插入法)
void insert_list_fornt(node** header, int prev_value, int insert_value)
{
//前指针
node* pre = nullptr;
node* temp_header = header;
//后指针
node next = temp_header->next_ptr;
while (temp_header != nullptr){
if (next->value ==prev_value){
//第一节点插入
if (pre == nullptr){
node* ptr = new node;
ptr->value = insert_value;
ptr->next_ptr = temp_header;
header = ptr;
}else {
node ptr = new node;
ptr->value = insert_value;
ptr->next_ptr = temp_header;
pre->next_ptr = ptr;
//已经是二级指针了,否则会报错
// *header = pre;
}
break;
}
pre = temp_header;
temp_header = temp_header->next_ptr;
next = temp_header->next_ptr;
}
}
//链表删除
void delete_list(node** header, int value)
{
node* current_ptr = header;
node pre = nullptr;
while (current_ptr != nullptr){
if (current_ptr->value == value){
//第一个节点删除
if (pre == nullptr){
node* ptr = current_ptr->next_ptr;
header = ptr;
}else {
node ptr = current_ptr->next_ptr;
pre->next_ptr = ptr;
current_ptr->next_ptr = nullptr;
}
delete current_ptr;
current_ptr = nullptr;
break;
}
pre = current_ptr;
current_ptr = current_ptr->next_ptr;
}
}
int main()
{
node* header = new node();
header->value = 0;
header->next_ptr = nullptr;
node* ptr{ nullptr };
for (int i =1;i<6;++i){
ptr =create(i, header);
}
//插入链表(后)
//insert_list_back(&header,5,6);
//插入链表(前)
insert_list_fornt(&header, 2, 7);
int i = 100;
//反转链表
//rever_list(&header);
}
//说明:玩单链表很简单,传参只需要传二级指针即可,然后去理解每个节点的意思
//记住一定要多敲,否则成不了大神…