首先定义一个节点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向右移动一位也就是缩小一倍