public class LinkListtest {
private LinkNode first;
private LinkNode last;
private int size;
public void add(Object o){
if(first == null){
LinkNode newnode = new LinkNode(null,o,null);
first = newnode;
last = (newnode);
}else{
LinkNode newnode = new LinkNode(last,o,null);
last.setNext(newnode);
last = newnode;
}
size++;
}
public int getSize(){
return size;
}
public Object get(int index){ //查询指定位置的值
rangeCheck(index);
if(first==null){
return null;
}else{
LinkNode temp = getlocation(index);
return temp.getContent();
}
}
public void remove(int index){
rangeCheck(index);
if(first==null){
throw new NullPointerException();
}else{
LinkNode temp = getlocation(index);
temp.getPre().setNext(temp.getNext()); //先找到要删除节点的位置,它的上一个节点的next指向下一个结点
temp = null;
size--;
}
}
public void updateNode(int index,Object o){ //指定位置添加元素
rangeCheck(index);
LinkNode oldnode = getlocation(index); //指定位置的原节点
LinkNode newnode = new LinkNode(); //想要插入的节点
newnode.setNext(oldnode.getNext());
newnode.setPre(oldnode.getPre());
newnode.getPre().setNext(newnode);
oldnode.getNext().setPre(newnode);
newnode.setContent(o);
oldnode = null;
size++;
}
private LinkNode getlocation(int index) {
LinkNode temp = first;
for (int i = 0; i < index; i++) {
temp = temp.getNext();
}
return temp;
}
private void rangeCheck(int index) { //越界检查
if (index < 0 || index >= size) {
try {
throw new Exception();
} catch (Exception e) {
e.printStackTrace();
}
}
}
//Node类
public class LinkNode {
private LinkNode next;
private Object content;
private LinkNode pre;
public LinkNode(){ }
public LinkNode(LinkNode pre,Object content,LinkNode next){
this.setPre(pre);
this.setContent(content);
this.setNext(next);
}
public LinkNode getNext() {
return next;
}
public void setNext(LinkNode next) {
this.next = next;
}
public Object getContent() {
return content;
}
public void setContent(Object content) {
this.content = content;
}
public LinkNode getPre() {
return pre;
}
public void setPre(LinkNode pre) {
this.pre = pre;
}
}