c++单向链表
节点
//创建结点
struct node
{
int data;
node* next;
};
1.打印链表
//打印链表信息
void display_list(node * head)
{
node* bac = head->next;
while (bac)
{
cout << bac->data << endl;
bac = bac->next;
}
cout << "-----------------------结束-----------------------------\n\n" << endl;
}
2.创建链表
//创建链表
node * create(int len)
{
node * head = new node;
node* pre = head;
for (int i = 0; i < len; i++)
{
node* p = new node;
p->data = i + 1;
pre->next = p;
pre = p;
p->next = NULL;
}
return head;
}
3.尾部追加
//追加节点
void append_node(node * head) {
node* newNode = new node;
newNode->data = 67;
node* pre = head;
while (pre->next)
{
pre = pre->next;
}
pre->next = newNode;
newNode->next = NULL;
this->len = this->len + 1;
}
4.插入
//插入节点
void insert_node(node * head,int pos)
{
node* pre = head;
int i = 0;
while (head->next)
{
if (i == pos-1)
{
node* newNode = new node;
newNode->data = 88;
newNode->next = pre->next;
pre->next = newNode;
this->len = this->len + 1;
break;
}
pre = pre->next;
i++;
}
}
5.删除
//删除节点
void delete_node(node * head,int pos)
{
node* pre = head;
int i = 0;
while (pre->next)
{
if (i == pos-1)
{
node* temp = pre->next;
pre->next = pre->next->next;
delete temp;
this->len = this->len - 1;
break;
}
pre = pre->next;
i++;
}
}
6.清空链表
//清空链表
void empty(node * head)
{
node* pre = head;
node* p = head->next;
while (head->next)
{
node* temp = pre->next;
pre->next = pre->next->next;
delete temp;
}
this->len = 0;
}
示例:
#include <iostream>
#include <string>
using namespace std;
//创建结点
struct node
{
//数据域
int data;
//指针域
node * next;
};
//创建链表
node * create(int len)
{
node * head = new node;
node* pre = head;
for (int i = 0; i < len; i++)
{
node* p = new node;
p->data = i + 1;
pre->next = p;
pre = p;
p->next = NULL;
}
return head;
}
//删除节点
void delete_node(node * head,int pos)
{
node* pre = head;
int i = 0;
while (pre->next)
{
if (i == pos-1)
{
node* temp = pre->next;
pre->next = pre->next->next;
delete temp;
break;
}
pre = pre->next;
i++;
}
}
//插入节点
void insert_node(node * head,int pos)
{
node* pre = head;
int i = 0;
while (head->next)
{
if (i == pos-1)
{
node* newNode = new node;
newNode->data = 88;
newNode->next = pre->next;
pre->next = newNode;
break;
}
pre = pre->next;
i++;
}
}
//追加节点
void append_node(node * head) {
node* newNode = new node;
newNode->data = 67;
node* pre = head;
while (pre->next)
{
pre = pre->next;
}
pre->next = newNode;
newNode->next = NULL;
}
//打印链表信息
void display_list(node * head)
{
node* bac = head->next;
while (bac)
{
cout << bac->data << endl;
bac = bac->next;
}
cout << "-----------------------结束-----------------------------\n\n" << endl;
}
//清空链表
void empty(node * head)
{
node* pre = head;
node* p = head->next;
while (head->next)
{
node* temp = pre->next;
pre->next = pre->next->next;
delete temp;
}
}
int main()
{
node * head = create(5);
display_list(head);
append_node(head);
display_list(head);
insert_node(head, 3);
display_list(head);
delete_node(head, 2);
display_list(head);
empty(head);
display_list(head);
return 0;
}
7.写入类中
链表.h
#pragma once
struct node;
class List
{
public:
int len ;
//int arr_index;
node* head;
//构造函数
List();
//柝构函数
~List();
//创建链表
void create(int len);
//打印链表数据
void display_list();
//尾部追加
void append_node();
//插入节点
void insert_node(int pos);
//删除节点
void delete_node(int pos);
//释放链表
void empty();
};
链表.cpp
#include "链表.h"
#include <iostream>
using namespace std;
struct node
{
int data;
node* next;
};
List::List()
{
len = 0;
head = new node;
}
List::~List()
{
}
//创建链表
void List::create(int len)
{
this->len = len;
node* pre = head;
for (int i = 0; i < this->len; i++)
{
node* p = new node;
p->data = i + 1;
pre->next = p;
pre = p;
p->next = NULL;
}
}
//打印链表信息
void List::display_list()
{
node* bac = head->next;
while (bac)
{
cout << bac->data << endl;
bac = bac->next;
}
cout << "-----------------------结束-----------------------------\n\n" << endl;
}
//尾部追加
void List::append_node() {
node* newNode = new node;
newNode->data = 67;
node* pre = head;
while (pre->next)
{
pre = pre->next;
}
pre->next = newNode;
newNode->next = NULL;
this->len = this->len + 1;
}
插入节点
void List::insert_node(int pos)
{
node* pre = head;
int i = 0;
while (head->next)
{
if (i == pos-1)
{
node* newNode = new node;
newNode->data = 88;
newNode->next = pre->next;
pre->next = newNode;
this->len = this->len + 1;
break;
}
pre = pre->next;
i++;
}
}
//删除节点
void List::delete_node(int pos)
{
node* pre = head;
int i = 0;
while (pre->next)
{
if (i == pos-1)
{
node* temp = pre->next;
pre->next = pre->next->next;
delete temp;
this->len = this->len - 1;
break;
}
pre = pre->next;
i++;
}
}
//清空链表
void List::empty()
{
node* pre = head;
node* p = head->next;
while (head->next)
{
node* temp = pre->next;
pre->next = pre->next->next;
delete temp;
}
this->len = 0;
}
测试
main.cpp
#include <iostream>
#include "链表.h"
using namespace std;
int main()
{
//测试程序
//node* head = new node;
List list;
list.create(5);
list.append_node();
list.insert_node(1);
list.delete_node(4);
//list.append_node(head);
//list.delete_node(head, 1);
list.display_list();
list.empty();
list.display_list();
cout << "链表长度" << list.len << endl;
list.create(10);
list.delete_node(5);
list.insert_node(3);
list.append_node();
list.display_list();
cout << "链表长度" << list.len << endl;
return 0;
}