前言
不得承认java应用的广泛,所以毅然决定java版本的数据结构和算法专题还是要坚决更新。每日更新2题,希望学习的小伙伴可以关注一波跟上,评论区欢迎讨论交流。
实现原理
-
节点(Node):链表的基本构建单元是节点,每个节点包含两部分:数据和指向下一个节点的指针。
class Node {int data;Node next;public Node(int data) {this.data = data;this.next = null;}
}
-
头指针(Head Pointer):链表的起始节点被称为头节点。头指针是指向链表第一个节点的指针。通过头指针,可以访问整个链表。
-
尾节点(Tail Node):链表中最后一个节点称为尾节点。它的指针通常指向NULL,表示链表的结束。
-
指针连接:链表中的节点通过指针相互连接。每个节点的指针指向下一个节点,形成一个链式结构。
动画演示过程
Linked List Stack Visualization
头插法
// 定义节点类
class Node {int data;Node next;public Node(int data) {this.data = data;this.next = null;}
}// 定义单链表类
class LinkedList {private Node head;public LinkedList() {this.head = null;}// 在链表头部插入节点public void prepend(int data) {Node newNode = new Node(data);newNode.next = head;head = newNode;}// 打印链表public void printList() {Node current = head;while (current != null) {System.out.print(current.data + " ");current = current.next;}System.out.println();}
}// 测试单链表头插法
public class Main {public static void main(String[] args) {LinkedList list = new LinkedList();list.prepend(3); // 链表:3list.prepend(5); // 链表:5 -> 3list.prepend(7); // 链表:7 -> 5 -> 3list.printList(); // 打印链表:7 5 3}
}
尾插法
// 定义节点类
class Node {int data;Node next;public Node(int data) {this.data = data;this.next = null;}
}// 定义单链表类
class LinkedList {private Node head;public LinkedList() {this.head = null;}// 在链表尾部插入节点public void append(int data) {Node newNode = new Node(data);if (head == null) {head = newNode;return;}Node current = head;while (current.next != null) {current = current.next;}current.next = newNode;}// 打印链表public void printList() {Node current = head;while (current != null) {System.out.print(current.data + " ");current = current.next;}System.out.println();}
}// 测试单链表尾插法
public class Main {public static void main(String[] args) {LinkedList list = new LinkedList();list.append(3); // 链表:3list.append(5); // 链表:3 -> 5list.append(7); // 链表:3 -> 5 -> 7list.printList(); // 打印链表:3 5 7}
}