单链表
在单链表中,每一个节点都有一个指针域指向后继节点,从而形成一种链接的作用。
在c/c++中可以通过结构体的形式,通过指针形成链表,在java中可以通过类的形式来实现。
附上c/c++的单链表
struct Link
{
int data;
Link *next;
};
头插法
顾名思义就是从头开始插入,插入的顺序会和链表中的数据发生颠倒。
//单链表头
Link* creatSingleLinkHead() //默认是插入5个数字的测试
{
Link *r;
Link *link=(Link*)malloc(sizeof(Link));
link->next=NULL; //将最后的尾节点置为null
for(int i=0;i<5;i++)
{
r=(Link*)malloc(sizeof(Link));
r->data=i;
r->next=link->next; //将r的尾部=link的尾部,也就是null
link->next=r; //将 r插入
}
return link;
}
以上的代码形成了一种将头部插入的方法,通过不断向头指针的next插入结构体达到目的。
尾插法
我们比较习惯的还是,插入的顺序要和存的数据的顺序一样,可以采用尾插法的方法,通过向尾部插入的方法。
刚开始学 的时候,总是想着不断给link.next赋值就能达到目的,但是这样是会让以前的数据丢失
Link* creatSingleLinkTail()
{
Link *link=(Link*)malloc(sizeof(Link)); //用来记录头结点
Link *s,*r;
r=link; //开始时候指向头结点
for(int i=0;i<5;i++)
{
s=(Link*)malloc(sizeof(Link));
s->data=i;
r->next=s; //将s插入
r=s; //将r指向s,从而可以继续向后面插入
}
r->next=NULL; //将尾结点赋值为空
return link;
}
java代码实现
public class Link{
protected Link next; //指针域
protected int data;//数据域
public Link(int data) {
this. data = data;
}
public int display() {
return data;
}
}
先定义一个Link的类,定义一个指向后面的指针域,
照例,我们还是插入5个数据
public class SingleNode {
private Link link;
public SingleNode(){
link=new Link(0);
}
public void addToLinkTail(){ //尾插法
Link tempLink=link;
for (int i=1;i<=5;i++){
Link linkAdd=new Link(i);
tempLink.next= new Link(i);
tempLink=linkAdd;
}
tempLink.next=null;
}
public void addToLinkHead(){ //头插法
link.next=null;
for (int i=1;i<=5;i++){
Link linkAdd=new Link(i);
linkAdd.next=link.next;
link.next=linkAdd;
}
}
public Link getLink(){
return link;
}
}