《java笔记系列》双向链表

8、双向链表

  我们知道单向链表只能从一个方向遍历,那么双向链表它可以从两个方向遍历。

  《java笔记系列》双向链表_第1张图片

  具体代码实现:

复制代码
  1 package com.ys.datastructure;
  2 
  3 public class TwoWayLinkedList {
  4     private Node head;//表示链表头
  5     private Node tail;//表示链表尾
  6     private int size;//表示链表的节点个数
  7     
  8     private class Node{
  9         private Object data;
 10         private Node next;
 11         private Node prev;
 12         
 13         public Node(Object data){
 14             this.data = data;
 15         }
 16     }
 17     
 18     public TwoWayLinkedList(){
 19         size = 0;
 20         head = null;
 21         tail = null;
 22     }
 23     
 24     //在链表头增加节点
 25     public void addHead(Object value){
 26         Node newNode = new Node(value);
 27         if(size == 0){
 28             head = newNode;
 29             tail = newNode;
 30             size++;
 31         }else{
 32             head.prev = newNode;
 33             newNode.next = head;
 34             head = newNode;
 35             size++;
 36         }
 37     }
 38     
 39     //在链表尾增加节点
 40     public void addTail(Object value){
 41         Node newNode = new Node(value);
 42         if(size == 0){
 43             head = newNode;
 44             tail = newNode;
 45             size++;
 46         }else{
 47             newNode.prev = tail;
 48             tail.next = newNode;
 49             tail = newNode;
 50             size++;
 51         }
 52     }
 53     
 54     //删除链表头
 55     public Node deleteHead(){
 56         Node temp = head;
 57         if(size != 0){
 58             head = head.next;
 59             head.prev = null;
 60             size--;
 61         }
 62         return temp;
 63     }
 64     
 65     //删除链表尾
 66     public Node deleteTail(){
 67         Node temp = tail;
 68         if(size != 0){
 69             tail = tail.prev;
 70             tail.next = null;
 71             size--;
 72         }
 73         return temp;
 74     }
 75     
 76     //获得链表的节点个数
 77     public int getSize(){
 78         return size;
 79     }
 80     //判断链表是否为空
 81     public boolean isEmpty(){
 82         return (size == 0);
 83     }
 84     
 85     //显示节点信息
 86     public void display(){
 87         if(size >0){
 88             Node node = head;
 89             int tempSize = size;
 90             if(tempSize == 1){//当前链表只有一个节点
 91                 System.out.println("["+node.data+"]");
 92                 return;
 93             }
 94             while(tempSize>0){
 95                 if(node.equals(head)){
 96                     System.out.print("["+node.data+"->");
 97                 }else if(node.next == null){
 98                     System.out.print(node.data+"]");
 99                 }else{
100                     System.out.print(node.data+"->");
101                 }
102                 node = node.next;
103                 tempSize--;
104             }
105             System.out.println();
106         }else{//如果链表一个节点都没有,直接打印[]
107             System.out.println("[]");
108         }
109         
110     }
111 }
复制代码

你可能感兴趣的:(note)