双向链表的java实现

首先定义一个节点Node这个类里面的previous指向上一个节点,next指向下一个节点,obj存储对象

public class Node {
   Node previous;
   Object obj;
   Node next;
public Node(Node previous, Object obj, Node next) {
   super();
   this.previous = previous;
   this.obj = obj;
   this.next = next;
}
public Node getPrevious() {
    return previous;
}
public Node() {
    super();
// TODO Auto-generated constructor stub
}
public void setPrevious(Node previous) {
   this.previous = previous;
}
public Object getObj() {
    return obj;
}
public void setObj(Object obj) {
   this.obj = obj;
}
public Node getNext() {
   return next;
}
public void setNext(Node next) {
  this.next = next;
}


}

定义一个LinkedList实现链表的功能

public class LinkedList {
private Node first;
private Node last;
private int size;
public void add(Object o){
Node newNode=new Node();
 
if(first==null){
newNode.setNext(null);
newNode.setObj(o);
newNode.setPrevious(null);
first=newNode;
last=newNode;
}else{
newNode.setNext(null);
newNode.setObj(o);
newNode.setPrevious(last);
last.next=newNode;
last=newNode;
}
size++;
}
public void add(int index,Object o){
 
Node findNode=node(index);
Node newNode=null;
newNode.obj=o;
findNode.previous.next=newNode;
newNode.previous=findNode.previous.next;
newNode.next=findNode;
findNode.previous=newNode;

size++;

}
public Object get(int index){
 
return node(index).getObj();
}
public Node node(int a){
Node findNode=null;
rangCheck(a);
if(a<size>>1){
  findNode=first;
for (int i=0;i<a;i++){
findNode=findNode.next;
 
}}
else{
findNode=last;
for(int i=size;i>a;i--){
findNode=last.previous;

}
}
 
 
return findNode;
}
public void remove(int a){
Node findNode=node(a);
if(findNode!=null){
findNode.previous.next=findNode.next;
findNode=null;
}size--;

}
public void remove(Object o){
Node findNode=first;
 
for(int i=1;i<size;i++){
if(get(i).equals(o)){
remove(i);
}
}
}
private void rangCheck(int a){
if(a<1||a>size){
try {
throw new Exception();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public int getSize(){
return size;
}
}

rangCheck检测有没有越界,node返回指定位置的节点,并根据位置if(a<size>>1来判断是从前遍历还是后变量进行优化>>1是把size向右移动一位也就是缩小一倍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农健身馆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值