自定义实现linkedlist的底层代码:
package cn.liu.three;
public class MyLinkedList {
Node first;
Node last;
private int size;
public int size() {
return size;
}
private Node node(int index) {
rangecheck(index);
Node temp=null;
if(first!=null) {
temp=first;
for(int i=0;i<index;i++)
{
temp=temp.next;
}
}
return temp;
}
private void rangecheck(int index) {
if(index<0||index>=size){
try {
throw new Exception();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Node n=new Node();
public void add(Object obj) {
if(first==null) {
n.setPrevious(null);
n.setObj(obj);
n.setNext(null);
first=n;
last=n;
}else {
//直接往last节点后增加新的节点
n.setPrevious(last);
n.setObj(obj);
n.setNext(null);
last.setNext(n);
last=n;
}
size++;
}
public void remove(int index) {
rangecheck(index);
Node temp=node(index);
if(temp!=null) {
Node up=temp.previous;
Node down=temp.next;
up.next=down;
down.next=up;
}
size--;
}
public Object get(int index) {
rangecheck(index);
Node temp=node(index);
if(temp!=null) {
return temp.obj;
}
return null;
}
public void add(int index,Object obj) {
rangecheck(index);
Node temp=node(index);
Node newnode=new Node();
newnode.obj=obj;
if(temp!=null) {
Node up=temp.previous;
up.next=newnode;
newnode.previous=up;
newnode.next=temp;
temp.previous=newnode;
size++;
}
}
public static void main(String[] args) {
MyLinkedList list=new MyLinkedList();
list.add("wert");
list.add("123");
System.out.println(list.size());
list.add("aaa");
list.add("bbb");
// list.add(1,"BBBB");
list.add("ccc");
list.add("ddd");
list.add("eee");
// list.remove(1);
System.out.println(list.get(0));
}
}
package cn.liu.three;
public class Node {
Node previous;
Object obj;
Node next;
public Node() {
}
public Node(Node previous, Object obj, Node next) {
super();
this.previous = previous;
this.obj = obj;
this.next = next;
}
public Node getPrevious() {
return previous;
}
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;
}
}