自己动手写数据结构之双端链表

双端链表实现

1 定义

双端链表与传统的链表很相似,但是它有一个新增的特性;即对最后一个链结点的引用

2 基本操作

表头插入 insertFirst

表尾插入 insertLast

表头删除 deleteFirst

3 基本元素

链表头 First

链表尾 Last

节点 Node

节点中数据域 data

节点中指针域 next

4 思路

First与Last

链表为空时first与last均为Null

链表中只有一个结点时,first与last均指向第一个结点

正常情况下,first指向第一个结点,last指向最后一个结点

表头插入 insertFirst

注意区分链表为空和不为空的情况

链表为空时,last = newNode

newNode.next = first

first = newNode

表尾插入 insertLast

注意区分链表为空和不为空的情况

链表为空时,first = newNode

last.next = newNode

last = newNode

表头删除 deleteFirst

代码实现

public class FirstLastLinkedList {

    private Node first;

    private Node last;

    public FirstLastLinkedList() {
        first = null;
        last = null;
    }

    public void insertFirst(int data){
        Node newNode = new Node(data);
        newNode.next = first;
        first = newNode;
        if (isEmpty()){
            last= newNode;
        }
    }

    public void insertLast(int data){
        Node newNode = new Node(data);
        if (isEmpty()){
            first = newNode;
        }else {
            last.next = newNode;
        }
        last = newNode;
    }

    public int deleteFirst(){
        int temp = first.data;
        if (first.next == null){
            last = null;
        }
        first = first.next;
        return temp;
    }

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

    class Node{

        private int data;

        private Node next;

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

        @Override
        public String toString() {
            return "Node{" +
                    "data=" + data +
                    '}';
        }
    }

}

你可能感兴趣的:(自己动手写数据结构之双端链表)