707.設計鏈表 力扣題目鏈接(opens new window) https://leetcode.cn/problems/design-linked-list/

題意:

在鏈表類中實現這些功能:

get(index):獲取鏈表中第 index 個節點的值。如果索引無效,則返回-1。 addAtHead(val):在鏈表的第一個元素之前添加一個值為 val 的節點。插入後,新節點將成為鏈表的第一個節點。 addAtTail(val):將值為 val 的節點追加到鏈表的最後一個元素。 addAtIndex(index,val):在鏈表中的第 index 個節點之前添加值為 val 的節點。如果 index 等於鏈表的長度,則該節點將附加到鏈表的末尾。如果 index 大於鏈表長度,則不會插入節點。如果index小於0,則在頭部插入節點。 deleteAtIndex(index):如果索引 index 有效,則刪除鏈表中的第 index 個節點。

思路 刪除鏈表節點:

添加鏈表節點:

這道題目設計鏈表的五個接口:

獲取鏈表第index個節點的數值 在鏈表的最前面插入一個節點 在鏈表的最後面插入一個節點 在鏈表第index個節點前面插入一個節點 刪除鏈表的第index個節點 可以説這五個接口,已經覆蓋了鏈表的常見操作,是練習鏈表操作非常好的一道題目

鏈表操作的兩種方式:

直接使用原來的鏈表來進行操作。 設置一個虛擬頭結點在進行操作。 下面採用的設置一個虛擬頭結點(這樣更方便一些,大家看代碼就會感受出來)。

//單鏈表 class ListNode { int val; ListNode next; ListNode(){} ListNode(int val) { this.val=val; } } class MyLinkedList { //size存儲鏈表元素的個數 int size; //虛擬頭結點 ListNode head;

//初始化鏈表
public MyLinkedList() {
    size = 0;
    head = new ListNode(0);
}

//獲取第index個節點的數值,注意index是從0開始的,第0個節點就是頭結點
public int get(int index) {
    //如果index非法,返回-1
    if (index < 0 || index >= size) {
        return -1;
    }
    ListNode currentNode = head;
    //包含一個虛擬頭節點,所以查找第 index+1 個節點
    for (int i = 0; i <= index; i++) {
        currentNode = currentNode.next;
    }
    return currentNode.val;
}

//在鏈表最前面插入一個節點,等價於在第0個元素前添加
public void addAtHead(int val) {
    addAtIndex(0, val);
}

//在鏈表的最後插入一個節點,等價於在(末尾+1)個元素前添加
public void addAtTail(int val) {
    addAtIndex(size, val);
}

// 在第 index 個節點之前插入一個新節點,例如index為0,那麼新插入的節點為鏈表的新頭節點。
// 如果 index 等於鏈表的長度,則説明是新插入的節點為鏈表的尾結點
// 如果 index 大於鏈表的長度,則返回空
public void addAtIndex(int index, int val) {
    if (index > size) {
        return;
    }
    if (index < 0) {
        index = 0;
    }
    size++;
    //找到要插入節點的前驅
    ListNode pred = head;
    for (int i = 0; i < index; i++) {
        pred = pred.next;
    }
    ListNode toAdd = new ListNode(val);
    toAdd.next = pred.next;
    pred.next = toAdd;
}

//刪除第index個節點
public void deleteAtIndex(int index) {
    if (index < 0 || index >= size) {
        return;
    }
    size--;
    if (index == 0) {
        head = head.next;
    return;
    }
    ListNode pred = head;
    for (int i = 0; i < index ; i++) {
        pred = pred.next;
    }
    pred.next = pred.next.next;
}

} 一鍵獲取完整項目代碼 java

———————————————— 版權聲明:本文為CSDN博主「向着五星的方向」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/qq_69748833/article/details/137598937