自定义实现LinkedList

来源:互联网 发布:便宜好用的汽车 知乎 编辑:程序博客网 时间:2024/05/20 21:19


package cn.xz.MyLinkedlist;
/**
 * 自定义实现一个LinkedList
 * @author 谢樟
 *
 */
public class MyLinkedList {

 private Node First;  //头节点
 private Node Last;   //尾节点

 int size;
 MyLinkedList(){          //构造函数
  First=new Node(null,null,null);
  Last=new Node(null,First,null);
  size=0;
 }
 public int size(){
  return size;
 }
 public void add(Object x){
  add(size(),x);
   }
 public void add(int index,Object value){
      addBefore(getNode(index),value);
 }
 public void addBefore(Node p,Object value){
  Node newNode=new Node(value,p.previous,p);
  newNode.previous.next=newNode;
  p.previous=newNode;
  size++;
 }
 public Node getNode(int index){
  Node p=null;
  if(index<0||index>size){
   System.out.println("下标越界");;
  }
  if(index<size/2){
   p=First.next;
   for(int i=0;i<index;i++){
    p=p.next;
   }
  }
  else{
   p=Last;
   for(int i=size;i>index;i--){
    p=p.previous;
   }
  }
  return p;
 }
 public Object get(int index){
  Node p=First.next;
  for(int i=0;i<index;i++){
   p=p.next;
  }
  return p.element;
 }
 public Object remove(int index){
  Node p=getNode(index);
  p.previous.next=p.next;
  p.next.previous=p.previous;
  return p.element;
 }
 public static void main(String[] args) {
  MyLinkedList linklist=new MyLinkedList();
  linklist.add("a");
        System.out.println(linklist.get(0));
 }

}
class Node{
 Object element;
 Node previous;
 Node next;
 Node(Object value,Node pre,Node next){
  element=value;
  previous=pre;
  this.next=next;
 }
}

0 0