数据结构单链表创建(头插法,尾插法)java/c/c++

来源:互联网 发布:网络信息安全宣传语 编辑:程序博客网 时间:2024/06/17 15:04

单链表

在单链表中,每一个节点都有一个指针域指向后继节点,从而形成一种链接的作用。
在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;    }}
原创粉丝点击