java实现双向链表操作

跟单向一个路子,没啥可说的,直接上代码:

public class DoubleLink {

    public Node first;
    public Node last;

    class Node {
        int data;
        Node lnext;
        Node rnext;


        public Node(int data) {
            this.data = data;
            this.lnext = null;
            this.rnext = null;
        }
    }

    public boolean isEmpty() {
        return first==null;
    }

    public void print() {
        Node current = first;
        while (current != null) {
            System.out.println(current.data);
            current = current.rnext;
        }
    }

    public void insert(Node newNode) {
        Node node;
        Node tmp = null;
        if(isEmpty()) {
            first = newNode;
            first.rnext = last;
            last = newNode;
            last.lnext = first;
        } else {
            //插入表头
            if(newNode.lnext == null) {
                first.lnext = newNode;
                newNode.rnext = first;
                first = newNode;
            } else {
                //插入表尾
                if(newNode.rnext == null) {
                    last.rnext = newNode;
                    newNode.lnext = last;
                    last = newNode;
                } else {
                    node = first;
                    while (newNode.rnext != node.rnext) {
                        tmp = node;
                        node = node.rnext;
                    }
                    tmp.rnext = newNode;
                    newNode.rnext = node;
                    node.lnext = newNode;
                    newNode.lnext = tmp;
                }
            }
        }
    }

    public void delete(Node delNode) {
        Node node;
        Node tmp;
        if(isEmpty()) {
            return;
        }
        if(delNode == null) {
            return;
        }
        if(first.data == delNode.data) {
            first = first.rnext;
            first.lnext = null;
        }
        else {
            tmp = first;
            node = first;
            while (node.data != delNode.data) {
                tmp = node;
                node = node.rnext;
            }
            tmp.rnext = delNode.rnext;
            tmp.lnext = delNode.lnext;
        }
    }

    public static void main(String[] args) {
        DoubleLink dl = new DoubleLink();
        Node node1 = dl.new Node(80);
        Node node2 = dl.new Node(90);
        dl.insert(node1);
        dl.insert(node2);
        dl.print();
        System.out.println("删除之后——");
        dl.delete(node2);
        dl.print();
    }

}

运行截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值