数据结构 | 链表LinkedList(Java实现)

目录

  • 一、链表的原理
  • 二、代码表示
    • 2.1 链表的结点定义
    • 2.2 链表的手工创建
    • 2.3 链表的遍历
    • 2.4 链表元素的插入和删除
  • 三、Java中的链表—LinkedList
  • 四、实现自己的LinkedList—MyLinkedList
  • 五、顺序表 vs 链表

一、链表的原理

数据结构 | 链表LinkedList(Java实现)_第1张图片

元素:真实存于线性表中的内容
结点
:为了组织链表而引入的一个结构,除了保存我们的元素之外,还会保存指向下一个节点的引用

当前结点(current / cur): 表示链表中某个结点。
前驱结点(previous / prev): 表示链表中某个结点的前一个结点;头结点没有前驱结点。
后继结点(next): 表示链表中某个结点的后一个结点;尾结点没有后继结点。

head 是一条链表的头结点,通过 head 我们可以找到所有的结点,所以可以用头节点完全代表链表

二、代码表示

2.1 链表的结点定义

public class Node {
   
    int val;
    Node next;
    
    public Node(int val) {
   
        this.val = val;
        this.next = null;
   }
}

2.2 链表的手工创建

// 创建一个 [1 3 2 6] 的链表
Node n1 = new Node(1);
Node n3 = new Node(3);
Node n2 = new Node(2);
Node n6 = new Node(6);
n1.next = n3;
n3.next = n2;
n2.next = n6;
n6.next = null;
Node head = n1;
// 创建一个空链表
Node head = null;

2.3 链表的遍历

Node cur = head;
while (cur != null) {
   
    cur = cur.next; 
}

2.4 链表元素的插入和删除

(1)给定前驱节点后的插入

Node prev = ...;
Node node = new Node(v);

node.next = prev.next;
prev.next = node;

(2)给定前驱节点后的删除

Node prev = ...;
prev.next = prev.next.next;

(3)头插

private static Node pushFront(Node head, int v) {
   
    Node node = new Node(v);
    node.next = head;
    head = node;
    return head; 
}

(4)头删

private static Node popFront(Node head) {
   
    if (head == null) {
   
        throw new RuntimeException("链表为空");
    }
    head = head.next;
    return head; 
}

(5)尾插

private static Node pushBack(Node head, int v) {
   
    if (head == null) {
   
        Node node = new Node(v);
        return node;
    }
    Node last = head;
    while (last.next != null) {
   
        last = last.next;
    }
    Node node = new Node(v);
    last.next = node;
    return head; 
}

(6)尾删

private static Node popBack(Node head) {
   
    if 

你可能感兴趣的:(数据结构,Java,链表,数据结构,java)