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