• 双向链表


      1 public class Demo {
      2     public static void main(String[] args) {
      3         MyLinkedList linkedList = new MyLinkedList();
      4         // 添加
      5         linkedList.add("123");
      6         linkedList.add("aaa");
      7         linkedList.add("中国人");
      8         System.out.println("获取长度为:" + linkedList.getSize());
      9         System.out.println("获取第0个元素:" + linkedList.getNode(0));
     10         System.out.println("打印全部链表元素:" + linkedList);
     11         // 添加到最前
     12         linkedList.addFirst("ccc");
     13         System.out.println("在最前面添加ccc之后打印链表元素:" + linkedList);
     14         // 添加到最后
     15         linkedList.addLast("zzz");
     16         System.out.println("在最后面添加zzz之后打印链表元素:" + linkedList);
     17         // 添加到指定位置
     18         linkedList.add(4, "ggg");
     19         System.out.println("在第4个位置添加ggg之后打印链表元素:" + linkedList);
     20         // 移除最前的
     21         linkedList.removeFirst();
     22         System.out.println("移除最前面的元素之后打印链表元素:" + linkedList);
     23         // 移除最后的
     24         linkedList.removeLast();
     25         System.out.println("移除最后面的元素之后打印链表元素:" + linkedList);
     26         // 移除指定位置上的
     27         linkedList.remove(2);
     28         System.out.println("移除第二个位置上的元素之后打印链表元素:" + linkedList);
     29         // 返回指定位置上的元素
     30         System.out.println("返回第一个位置上的元素:" + linkedList.getNode(1));
     31         System.out.println("完成所有操作之后打印链表元素:" + linkedList);
     32     }
     33 }
     34 class MyLinkedList implements MyMethods {
     35     private Node head = new Node(null);
     36     private int size;
     37     @Override
     38     public boolean add(String data) {
     39         addLast(data);
     40         return true;
     41     }
     42     @Override
     43     public boolean add(int index, String data) {
     44         if (index < 0 || index >= getSize())
     45             throw new NullPointerException("操作失败!");
     46         firstAdd(new Node(data), getNode(index));
     47         return true;
     48     }
     49     private void firstAdd(Node node, Node temp) {
     50         node.next = temp;
     51         node.prev = temp.prev;
     52         node.prev.next = node;
     53         node.next.prev = node;
     54         size++;
     55     }
     56     @Override
     57     public boolean addFirst(String data) {
     58         firstAdd(new Node(data), getNode(0));
     59         return true;
     60     }
     61     @Override
     62     public boolean addLast(String data) {
     63         lastAdd(data);
     64         return true;
     65     }
     66     private void lastAdd(String data) {
     67         if (getSize() == 0) {
     68             Node newNode = new Node(data);
     69             newNode.prev = head;
     70             newNode.prev.next = newNode;
     71             size++;
     72         } else {
     73             Node temp = getNode(getSize() - 1);
     74             Node node = new Node(data);
     75             node.prev = temp;
     76             node.prev.next = node;
     77             size++;
     78         }
     79     }
     80     @Override
     81     public int getSize() {
     82         return size;
     83     }
     84     @Override
     85     public boolean remove(int index) {
     86         if (index < 0 || index >= getSize())
     87             throw new NullPointerException("操作失败!");
     88         removeNodeFirst(getNode(index));
     89         return true;
     90     }
     91     @Override
     92     public boolean removeFirst() {
     93         removeNodeFirst(head.next);
     94         return true;
     95     }
     96     private void removeNodeFirst(Node node) {
     97         node.prev.next = node.next;
     98         node.next.prev = head;
     99         node.next = null;
    100         node.prev = null;
    101         size--;
    102     }
    103     @Override
    104     public boolean removeLast() {
    105         removeNodeLast(getNode(getSize() - 1));
    106         return true;
    107     }
    108     private void removeNodeLast(Node node) {
    109         node.prev.next = null;
    110         node.prev = null;
    111         size--;
    112     }
    113     @Override
    114     public Node getNode(int index) {
    115         Node node = head;
    116         if (index < 0 || index >= getSize())
    117             throw new NullPointerException("操作失败!");
    118         for (int i = -1; i < index; i++) {
    119             node = node.next;
    120         }
    121         return node;
    122     }
    123     class Node {
    124         private String data;
    125         private Node prev;
    126         private Node next;
    127         public Node(String data) {
    128             this.data = data;
    129         }
    130         @Override
    131         public String toString() {
    132             return data;
    133         }
    134     }
    135     @Override
    136     public String toString() {
    137         StringBuffer sb = new StringBuffer();
    138         Node node = head;
    139         for (int i = 0; i < size; i++) {
    140             node = node.next;
    141             if (i > 0)
    142                 sb.append(",");
    143             sb.append(node.data);
    144         }
    145         return sb.toString();
    146     }
    147 }
    148 interface MyMethods {
    149     // 添加元素
    150     public boolean add(String data);
    151     // 添加元素到最前面
    152     public boolean addFirst(String data);
    153     // 添加元素到最后面
    154     public boolean addLast(String data);
    155     // 在指定位置添加元素
    156     public boolean add(int index, String data);
    157     // 移除最前面的元素
    158     public boolean removeFirst();
    159     // 移除最后面的元素
    160     public boolean removeLast();
    161     // 移除指定位置上的元素
    162     public boolean remove(int index);
    163     // 获取指定位置上的元素
    164     public Node getNode(int index);
    165     // 获取链表的长度
    166     public int getSize();
    167 }

      执行结果:

     1 获取长度为:3
     2 获取第0个元素:123
     3 打印全部链表元素:123,aaa,中国人
     4 在最前面添加ccc之后打印链表元素:ccc,123,aaa,中国人
     5 在最后面添加zzz之后打印链表元素:ccc,123,aaa,中国人,zzz
     6 在第4个位置添加ggg之后打印链表元素:ccc,123,aaa,中国人,ggg,zzz
     7 移除最前面的元素之后打印链表元素:123,aaa,中国人,ggg,zzz
     8 移除最后面的元素之后打印链表元素:123,aaa,中国人,ggg
     9 移除第二个位置上的元素之后打印链表元素:123,aaa,ggg
    10 返回第一个位置上的元素:aaa
    11 完成所有操作之后打印链表元素:123,aaa,ggg
  • 相关阅读:
    实验二
    实验一
    网络对抗技术 实验四 恶意代码技术
    网络对抗技术 实验三 密码破解技术
    网络对抗技术 实验二 网络嗅探与欺骗
    网络对抗技术 实验一 网络侦查与网络扫描
    实验6
    实验5
    caogao
    实验四
  • 原文地址:https://www.cnblogs.com/void0720/p/4778062.html
Copyright © 2020-2023  润新知