目录
注意:一定要注意:再定义tmp时,要给它赋一个初始值(推荐使用 new list_next)
我们知道单链表,今天博主(也就是我)自己手写了一个单链表(用指针写的)现在我来分享一下。
创建文件:
我用三个来写(list.h,listfun.h,run.cpp)(run.cpp)用来调试
具体实现:
list.h
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<limits.h>
struct list_next{//链表的一个值
int value;
struct list_next *next;
};
struct list_make{//一条链表的结构
list_next *head;
list_next *tail;
int size;
};
//void head_add(list_next* &head,int v,int &size);//头插
//void tail_add(list_next* &tail,int v,int &size);//尾插
//void add_node(list_next* head,int p,int v,list_next* tail,int &size);//插入
//void change(list_next* head,int p,int v);//改值
//void head_del(list_next* &head,int &size);//头删
//void del_node(list_next* head,int p,list_next* &tail,int &size);//删除
//void init(list_make &p,int v) //初始化
接下来就是核心的listfun.h
首先是头插。
函数定义:
void head_add(list_next* &head,int v,int &size)
(这里用了引用,不会的童鞋们请看->引用教程 )
先用图来演示:(左边是值,右边是next域)
上图是原来的样子,tmp是要插入的数。
list_next* tmp=new list_next;
tmp->value=v;
接着把tmp的next改成head。
tmp->next=head;
再把头换成tmp。
head = tmp;
最后,size+1(因为长度增加了)
size++;
所以头插代码就是:
void head_add(list_next* &head,int v,int &size)
{
list_next* tmp=new list_next;
tmp->value=v;
tmp->next=head;
head = tmp;
size++;
}