数据结构与算法入门——线性结构之循环链表、双链表

循环链表:顾名思义就是将单链表的头和尾连起来,形成一条循环的链表,那么自然就是在单链表的基础上做一点改动,将单链表的第一个节点作为最后一个节点的下一个节点即可

package SingleList;
//循环链表
public class LoopNode {
    //节点内容
    int date;

    //定义下一个节点就是自己
    LoopNode next = this;

    public LoopNode(int date) {
        this.date = date;
    }

    //循环链表最后一个节点的下一个节点就是第一个节点,因此不需要追加节点的方法,直接使用插入节点方法即可
    public void insert(LoopNode node){
        //取出下一个节点,作为插入节点的下个节点
        LoopNode nextnext = this.next;
        this.next = node;
        node.next = nextnext;
    }

    //删除节点
    public void remove(){
        LoopNode newnext = next.next;
        this.next = newnext;
    }

    //打印节点数据
    public int getDate(){
        return this.date;
    }
}

双链表也是一个循环链表,不同的是他是一个双向的链表,所以他有两个指针,分别指向前一个节点和后一个节点,当他只有一个节点的时候,那么他的钱一个节点和后一个节点都是他自己。如图:

在这里插入图片描述

代码这里只展示增加,其他的就不展示了

package SingleList;

public class DoubleNode {
    //当前节点数据
    int date;
    //上一个节点
    DoubleNode pre = this;
    //下一个节点
    DoubleNode next = this;

    public DoubleNode(int date) {
        this.date = date;
    }

    public void insert(DoubleNode node){
        //还是老套路,获取当前节点的下一个节点,作为下下个节点
        DoubleNode nextnext = this.next;
        //把要插入的节点作为当前节点的下一个节点
        this.next = node;
        //由于是双链表,从前能查到后面,从后面也能查到前面,所以还要把当前节点作为插入节点前面的节点
        node.pre = this;
        //把获取的下下个节点作为插入节点的下个节点
        node.next = nextnext;
        //由于是双链表,从前能查到后面,从后面也能查到前面,所以还要把插入的节点作为下下个节点前面的节点
        nextnext.pre = node;
    }

    //获取数据
    public int getDate() {
        return this.date;
    }
}

发布了23 篇原创文章 · 获赞 5 · 访问量 1149

猜你喜欢

转载自blog.csdn.net/qq_40181435/article/details/104661437