双向链表

来源:互联网 发布:北京婚恋网络 编辑:程序博客网 时间:2024/06/05 03:19

1. 节点

/** * 链接点 ,相当于是车厢 */public class Node {    // 数据域    public long data;    // 指针域    public Node next;       public Node previous;    public Node(long value){        this.data = value;    }    /**     *  显示方法     */    public void display(){        System.out.println(data +" ");    }}

2. 链表

public class FirstLastLinkList {    // 定义一个头结点    public Node first;    // 定义一个尾结点    public Node last;    public FirstLastLinkList() {        this.first = null;        this.last = null;    }    /**     * 判断链表是否为空     */    public boolean isEmpty() {        return first == null;    }    // 插入头结点    public void addFirstNode(long data) {        Node node = new Node(data);        if (isEmpty()) {            last = node;        }        node.next = first;        first = node;    }    /**     * 尾部 插入     */    public void addLastNode(long data) {        Node node = new Node(data);        int pos = 0;        if (isEmpty()) {            first = node;        }else{                  last.next = node;        }        last = node;    }    /**     * 删除一个头结点,并返回头结点     */    public Node deleteFirstNode() {        Node temp = first;        if(!isEmpty()){            first = temp.next;        }        return temp;    }    /**     * 通过数据删除结点     */    public Node deleteDyData(int data) {        Node current = first;        Node previous = first;        while (current.data != data) {            if (current.next == null) {                return null;            }            previous = current;            current = current.next;        }        if (current == first) {            first = current.next;        } else if(current == last){            last = previous;            previous.next = null;        }else{            previous.next = current.next;        }        return current;    }    /**     * 显示出所有结点信息     */    public void displayNodes() {        Node current = first;        while (current != null) {            current.display();            current = current.next;        }    }    /**     * 通过位置查找结点信息     */    public Node findByPos(int index) {        Node current = first;        int pos = 0;        if (pos != index) {            current = current.next;            pos++;        }        return current;    }    /**     * 根据数据查找节点信息     */    public Node findByData(int data) {        Node current = first;        while (current.data != data) {            if (current.next == null)                return null;            current = current.next;        }        return current;    }}
原创粉丝点击