鏈表是一種時常會用到的數據結構,因此紮實掌握鏈表的基本操作則顯得十分重要。
以下是關於幾個常見鏈表操作的動態圖解,大家可以收藏起來,方便以後複習之用。
鏈表插入
插入空鏈表
Node newNode = newNode(data);
head = newNode;
newNode.next = null;
插入鏈表中央
Node newNode = new Node(data);
Node current = head;
// 遍歷尋找插入位置
while (!current.equals(targetNode)) {
current = current.next;
}
newNode.next = current.next;
current.next = newNode;
插入鏈表開頭
Node newNode = new Node(data);
newNode.next = head;
head = newNode;
插入鏈表末尾
Node newNode = new Node(data);
Node current = head;
// 遍歷到鏈表末尾
while (current.next != null) {
current = current.next;
}
current.next = newNode;
newNode.next = null;
鏈表刪除
刪除中間節點
Node prev = null;
Node current = head;
// 遍歷尋找目標節點
while (!currentNode.equals(targetNode)) {
prev = current;
current = current.next;
}
prev.next = current.next;
刪除頭節點
head = head.next;
刪除末尾節點
同刪除中間節點代碼一樣
Node prev = null;
Node current = head;
// 遍歷尋找目標節點
while (!currentNode.equals(targetNode)) {
prev = current;
current = current.next;
}
prev.next = current.next;
翻轉鏈表
public class Main {
public static void reverseLinkedList(LinkedList list) {
if (list.head == null || list.head.next == null) {
return;
}
Node prev = null;
Node current = list.head;
Node next = current.next;
while (current != null) {
current.next = prev;
if (next == null) {
break;
}
prev = current;
current = next;
next = next.next;
}
list.head = current;
}
}
class Node {
public Node next;
public int val;
public Node(int val) {
this.val = val;
this.next = null;
}
}
class LinkedList {
public Node head;
}