動畫講解鏈表3大基本操作 - 插入,刪除與翻轉

鏈表是一種時常會用到的數據結構,因此紮實掌握鏈表的基本操作則顯得十分重要。

以下是關於幾個常見鏈表操作的動態圖解,大家可以收藏起來,方便以後複習之用。

鏈表插入

插入空鏈表

在這裏插入圖片描述

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章