java自定义链表

首先是单向链表

package com.cyx.collection.com.cyx.list;

/**
 * 自定义单向链表
 * @param <T> 泛型变量
 */
public class MyNode<T> {

    private T data;//链中存储的数据

    private MyNode<T> next;//下一个链

    public MyNode(T data, MyNode<T> next) {
        this.data = data;
        this.next = next;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public MyNode<T> getNext() {
        return next;
    }

    public void setNext(MyNode<T> next) {
        this.next = next;
    }
}

package com.cyx.collection.com.cyx.list;

public class MyNodeTest {

    public static void main(String[] args) {
        MyNode<String> first = new MyNode<>("第一个链",null);
        MyNode<String> second = new MyNode<>("第二个链",null);
        first.setNext(second);
        MyNode<String> third = new MyNode<>("第三个链",null);
        second.setNext(third);
        MyNode<String> fourth = new MyNode<>("第四个链",null);
        third.setNext(fourth);
        MyNode<String> nextNode = first;
        while(nextNode != null){
            System.out.println(nextNode.getData());
            nextNode = nextNode.getNext();
        }
        System.out.println("===================");
        MyNode<Integer> number4 = new MyNode<>(4,null);
        MyNode<Integer> number3 = new MyNode<>(3,number4);
        MyNode<Integer> number2 = new MyNode<>(2,number3);
        MyNode<Integer> number1 = new MyNode<>(1,number2);
        MyNode<Integer> next = number1;
        while(next != null){
            System.out.println(next.getData());
            next = next.getNext();
        }
    }

}

这是一个自定义单向链表,使用了泛型作为变量,单向链表需要的变量有data,存储数据,还有next,表示指向下一链,创建构造方法,和get和set方法,再创建一个Test测试类,之后创建对象时,赋值,再赋值让箭头指向下一个链表,最后创建头结点,遍历获取链的数据,同时依次把节点更改,让他能链接上。

自定义双向链表

package com.cyx.collection.com.cyx.list;

/**
 * 自定义双向链表
 * @param <T>
 */
public class DeNode<T> {

    private T data;//链中存储的数据

    private DeNode<T> prev;//前一个链

    private DeNode<T> next;//后一个链

    public DeNode(T data, DeNode<T> prev, DeNode<T> next) {
        this.data = data;
        this.prev = prev;
        this.next = next;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public DeNode<T> getPrev() {
        return prev;
    }

    public void setPrev(DeNode<T> prev) {
        this.prev = prev;
    }

    public DeNode<T> getNext() {
        return next;
    }

    public void setNext(DeNode<T> next) {
        this.next = next;
    }
}

package com.cyx.collection.com.cyx.list;

public class DeNodeTest {

    public static void main(String[] args) {
        DeNode<Integer> number1 = new DeNode<>(1,null,null);
        DeNode<Integer> number2 = new DeNode<>(2,number1,null);
        number1.setNext(number2);
        DeNode<Integer> number3 = new DeNode<>(3,number2,null);
        number2.setNext(number3);
        DeNode<Integer> number4 = new DeNode<>(4,number3,null);
        number3.setNext(number4);
        DeNode<Integer> nextNode = number1;
        while(nextNode!=null){
            System.out.println(nextNode.getData());
            nextNode = nextNode.getNext();
        }
        System.out.println("========================");
        DeNode<Integer> prevNode = number4;
        while (prevNode != null){
            System.out.println(prevNode.getData());
            prevNode = prevNode.getPrev();
        }
    }

}

这是一个自定义双向链表,使用了泛型作为变量,双向链表需要的变量有data存储数据,prev指向前一个链,next指向下一个链,它们互相配合,就可以实现双向链表互相获取数据。构造对象时,赋值,按照上面代码,number1头结点,下一个链指向number2,number2上一个指向number1,下一个指向number3,number3上一个指向number2,下一个指向number4依次类推,接下来通过分别从前和后开始遍历,来从前和后开始打印元素。如何从前或后遍历呢?把number1赋值nextNode表示从number1开始,元素不为空,打印数据,之后把当前的下一个链,赋值给nextNode,依次循环,从前往后打印,从后往前打印呢?就是把最后一个元素当作头结点,开始遍历不为空,依次往前遍历。

讲的比较菜,(⊙﹏⊙)大家多体谅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值