赞
踩
节点
//创建结点
struct node
{
int data;
node* next;
};
//打印链表信息
void display_list(node * head)
{
node* bac = head->next;
while (bac)
{
cout << bac->data << endl;
bac = bac->next;
}
cout << "-----------------------结束-----------------------------\n\n" << endl;
}
//创建链表 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 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; }
//插入节点 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++; } }
//删除节点 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++; } }
//清空链表
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; }
链表.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; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。