java编辑一个双向列表_Java双向列表

package com.mashibing.doubleLink;

public class DoubleLink {

private int size =0;

private Nodehead;//头节点

static class Node {

Nodeprev;

Nodenext;

T value;

public Node(T value) {

this.prev =null;

this.next =null;

this.value = value;

}

}

public DoubleLink() {

}

public boolean isEmtity(Node head) {

return null == head ?true :false;

}

/**

* 这个是一直从尾部添加节点

* @param value

*/

public void add(T value) {

Node node =new Node<>(value);

if (isEmtity(head)) {

head = node;

size++;

return;

}

Node cru =head;

while (null != cru.next) {

//我们去找节点的最后一个节点 看是不是为null  如果为null 我们就认为是最后一个节点 在该节点后面追加新的节点

cru = cru.next;

}

cru.next = node;

node.prev = cru;

size++;

}

/**

* 头节点加入 这是一个列表结构 很典型的列子  很多算法用的这个 比如 LRU 算法

*/

public void headAdd(T value) {

Node node =new Node<>(value);

if (isEmtity(head)) {

head = node;

size++;

return;

}

head.prev = node;

node.next =head;

head = node;

size++;

}

public T getValue(int index) {

if (isEmtity(head)) {

return null;

}

if (size < index) {

throw  new IndexOutOfBoundsException();

}

Node node = forEach(head,index);

return node.value;

}

public Node forEach(Node head,int index) {

Node cru = head;

for (int i =0; i < index; i++) {

cru = cru.next;

}

return cru;

}

public static void main(String[] args) {

DoubleLink doubleLink =new DoubleLink<>();

doubleLink.headAdd(1);

doubleLink.headAdd(2);

doubleLink.headAdd(3);

doubleLink.headAdd(4);

System.out.println(doubleLink.getValue(0));

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值