实现双向链表(Java)

双向链表易增删,不易检索,代码如下:

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;
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值