LinkedList笔记.md 2.5 KB

  • 自己写的一个Linked ```java package collection.list.linkedList_;

import java.util.LinkedList;

/**

  • 模拟一个简单的双向链表 */

public class LinkedList01 {

public static void main(String[] args) {
    Node node1 = new Node("1");
    Node node2 = new Node("2");
    Node node3 = new Node("3");
    node1.next = node2;
    node2.next = node3;
    node2.pre = node1;
    node3.pre = node2;
    Node first = node1;
    Node last = node3;
    bianli1(first);
    System.out.println("============");
    // 遍历从尾到头
    bianli2(last);
    // 添加一个节点 在 1-2之间 1.5
    Node node1_5 = new Node("1.5");
    node1.next = node1_5;
    node1_5.next = node2;
    node2.pre = node1_5;
    System.out.println("============");
    bianli1(first);
    // 删除一个节点 2
    System.out.println("============");
    removeNode(node1);
    first = node1_5;
    bianli1(first);

}
// 删除节点
private static void removeNode(Node removeNode) {
    if(removeNode.next == null) {
        // 最后一个
        removeNode.pre.next = null;
        return;
    }
    if(removeNode.pre == null) {
        // 第一个
        removeNode.next.pre = null;
        return;
    }
    // 在中间 ①将上一个节点的next指向 removeNode 的后一个节点
    removeNode.pre.next = removeNode.next;
    // ② 将后一个节点的 pre 指向 removeNode的前一个节点
    removeNode.next.pre = removeNode.pre;
}
private static void bianli1(Node first) {
    // 遍历 从头到尾
    while (true) {
        if(first == null) {
            break;
        }
        System.out.println(first);
        // 将指针指向后面一位
        first = first.next;
    }
}
private static void bianli2(Node last) {
    // 遍历 从尾到头
    while (true) {
        if(last == null) {
            break;
        }
        System.out.println(last);
        // 将指针指向后面一位
        last = last.pre;
    }
}

}

// 定义一个Node类,Node的对象则表示双向链表的一个节点 class Node {

public Object item; //真正存放的数据
public Node pre; // 指向上一个节点
public Node next; // 指向下一个节点
public Node(Object name) {
    this.item = name;
}

public String toString() {
    return  "node name" + item;
}

}

```