代码实现:
#include <iostream>
using namespace std;
#define eleType int//定义链表数据类型
struct Lian{
eleType data;//节点值
Lian *next;//指向下一个节点的指针
Lian(eleType x) : data(x),next(NULL){}//有参构造器
};
//链表处理的相关方法
class LinkedList{
private:
Lian *head;//头节点
int size;//元素数量
public:
LinkedList() : head(NULL),size(0){}//构造函数
~LinkedList();//析构函数
//下面的都是函数声明
void insert(int i,eleType value);
void remove(int i);
Lian *find(eleType value);
Lian *get(int i);
void update(int i,eleType value);
void print();
};
//析构函数:自动释放内存空间
LinkedList ::~LinkedList() {
Lian *curr=head;
while (curr!=NULL){
Lian *tmp =curr;
curr=curr->next;
delete tmp;
}
}
//插入函数
void LinkedList::insert(int i, int value) {
Lian *newNode=new Lian(value);
if(i==0){
newNode->next=head;
head = newNode;
}else{
Lian *curr=head;
for (int j = 0; j < i-1; ++j) {
curr=curr->next;
}
newNode->next=curr->next;
curr->next=newNode;
}
size++;
}
//删除函数
void LinkedList::remove(int i) {
if(i==0){
Lian *temp=head;
head=head->next;
delete temp;
}else{
Lian *curr=head;
for (int j = 0; j < i-1; ++j) {
curr=curr->next;
}
Lian *temp=curr->next;
curr->next=temp->next;
delete temp;
}
size--;
}
//查找函数
Lian *LinkedList::find(int value) {
Lian *curr=head;
while (curr&&curr->data!=value){
curr=curr->next;
}
return curr;
}
//取值函数
Lian *LinkedList::get(int i) {
Lian *curr=head;
for (int j = 0; j < i-1; ++j) {
curr=curr->next;
}
return curr;
}
//更新函数
void LinkedList::update(int i, int value) {
get(i)->data==value;
}
void LinkedList::print() {
Lian *curr=head;
while (curr){
cout<<curr->data<<" ";
curr=curr->next;
}
cout<<endl;
}
int main(){
return 0;
}
一、基本思想
每个节点存储一个数值和一个指向下一个节点的指针,链表的遍历与顺序表不同,顺序表每个节点包含索引,可以直接找到,链表则是从第一个开始往后遍历,根据指向下一个节点的指针遍历。
二、链表定义
(1)节点构造(结构体)
节点用结构体构造,每个节点需要存储一个数据和指向下一节点的指针
(2)链表构造(类)
链表存储头指针和链表长度,以及相关方法的实现
三、函数讲解
(1)析构函数
析构函数主要用于遍历节点时的释放内存,tmp指针在遍历时最终为游离状态,因此需要对其做删除操作。
(2)插入函数
传进来需要插入的位置,与插入的值,先生成新的节点,然后根据i的值来判断插入的位置,在链表中从头节点开始遍历,遍历到相应的位置后,将遍历到的节点的下一个节点作为需要插入节点的下一个节点(也就是插入节点的指针指向当前遍历到的下一个节点),当前遍历到的节点指向插入节点,最后扩容size。
(3)删除函数(根据索引删除)
根据索引 i 查找删除节点的上一个节点,遍历i-1次,找到需要删除的前一个节点(前驱节点),然后将需要删除的节点存储到temp里面,然后将前驱节点的下一个节点变成删除节点的下一个节点,最后将删除节点删除,链表长度减一。
(4)查找函数(根据值查找)
直接从头节点开始遍历,比较节点数据与查找值,查找后返回当前节点。
(5)取值函数(根据索引取值)
根据索引从头节点开始遍历 i 次,最终遍历结束后的游标节点标记的值就是需要查找的节点。
(6)更新节点函数(根据索引找到指定位置)
直接调用取值函数,取值函数的返回的是节点,因此直接改变当前节点的DATA数据。
(7)打印链表
遍历链表将每个数据逐个打印出来。