双向链表易增删,不易检索,代码如下:
public class MyLinkedListTest {
public static void main(String[] args) {
MyLinkedlist l = new MyLinkedlist();
l.inSert(1);
l.inSert(2);
l.delete(2);
l.delete(2);
}
}
class Node{
Node prev;
Node next;
int key;
public Node(int key) {
this.key = key;
prev = null;
next = null;
}
}
class MyLinkedlist{
private Node nil;//有了它,在插入等方法中就不需要判断空指针问题了
public MyLinkedlist() {
nil = new Node(0);
nil.prev = nil;
nil.next = nil;
}
public void inSert(int x) {//这里插入是在首位置插入
Node xn = new Node(x);//先new一个结点
xn.next = nil.next;
nil.next.prev = xn;
nil.next = xn;
xn.prev = nil;
}
public Node search(int x) {//注意搜索返回的是结点
return search(nil.next, x);
}
private Node search(Node cur, int x) {//递归
if(cur == nil || cur.key == x)
return cur;
return search(cur.next, x);
}
public void delete(int x) {
Node xn = search(x);//先找到才能删
if(xn == nil)
System.out.println("无此结点");
else {
xn.prev.next = xn.next;
xn.next.prev = xn.prev;
}
}
}