我写了个乞丐版的LinkedList,主要是实现add,remove,get方法,但是remove方法一直报异常,麻烦老师看一下问题出在了哪里,以下是源码
LinkedList类
package TestLinkedList;
public class LinkedList {
private Node first=null;
private Node last=null;
private int size;
//索引返回值
Object node(int index) {
Node x=first;
for(int i=0;i<index;i++) {
x=first;
x=x.next;
}return x.object;
}
//tostring方法
public String toString() {
String result="";
//如果链表中没有根节点,直接返回空
if(first!=null){
Node temp = first;
result=temp.object.toString();
//如果已经遍历到最后一个节点,结束
while(temp.next!=null){
result+=","+temp.next.object.toString();
temp=temp.next;
}
}
return "LinkedList [" +result + "]";
}
//add方法
public void add(Object object) {
Node l=last;
Node newnode=new Node(l,object,null);
last=newnode;
if(l==null) {
first=newnode;
}else {
l.next=newnode;
}
size++;
};
//remove方法
public void remove(Object object) {
Node l=last;
Node f=first;
for(int i=0;i<size;i++)
{
if(f.equals(object)) {
break;}
f=f.next;
}
if(f.prv==null&&f.next!=null) {
f.next=first;
}else if(f.prv!=null&&f.next==null) {
f.prv=last;
}else if(f.prv!=null&&f.next!=null) {
f.prv.next=f.next;
f.next.prv=f.prv;
}
f.object=null;
size--;
}
//get方法
public Object get(int index) {
Object d=node(index);
return d;
}
}
Node类
package TestLinkedList;
public class Node {
Object object;
Node prv;
Node next;
public Node(Node prv,Object object,Node next) {
this.prv=prv;
this.object=object;
this.next=next;
}
public Node() {
}
}
Test测试
package TestLinkedList;
public class Test {
public static void main(String[] args) {
LinkedList link=new LinkedList();
//测试add
link.add("hi");
link.add("word");
//测试tostring
System.out.println(link);
//测试get
System.out.println(link.get(1));
//测试remove
link.remove("word");
System.out.println(link);
}
}
运行效果
