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

单链表

在单链表中,每一个节点都有一个指针域指向后继节点,从而形成一种链接的作用。
在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;
    }
}
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值