每日一練:LeeCode-707. 設計鏈表 【鏈表+虛擬頭結點+設計】

每日一練:LeeCode-707. 設計鏈表 【鏈表+虛擬頭結點+設計】

    • 思路
      • 設置虛擬頭節點

本文是力扣 每日一練:LeeCode-707. 設計鏈表 【鏈表+虛擬頭結點+設計】 學習與理解過程,本文僅做學習之用,對本題感興趣的小伙伴可以出門左拐LeeCode-707. 設計鏈表

你可以選擇使用單鏈表或者雙鏈表設計并實現自己的鏈表

單鏈表中的節點應該具備兩個屬性:valnextval 是當前節點的值,next 是指向下一個節點的指針/引用。

如果是雙向鏈表,則還需要屬性 prev 以指示鏈表中的上一個節點。假設鏈表中的所有節點下標從 0 開始。

實現 MyLinkedList 類:

  • MyLinkedList() 初始化 MyLinkedList 對象。
  • int get(int index) 獲取鏈表中下標為 index 的節點的值。如果下標無效,則返回 -1
  • void addAtHead(int val) 將一個值為 val 的節點插入到鏈表中第一個元素之前。在插入完成后,新節點會成為鏈表的第一個節點。
  • void addAtTail(int val) 將一個值為 val 的節點追加到鏈表中作為鏈表的最后一個元素。
  • void addAtIndex(int index, int val) 將一個值為 val 的節點插入到鏈表中下標為 index 的節點之前。如果 index 等于鏈表的長度,那么該節點會被追加到鏈表的末尾。如果 index 比長度更大,該節點將 不會插入 到鏈表中。
  • void deleteAtIndex(int index) 如果下標有效,則刪除鏈表中下標為 index 的節點。

示例:

輸入
["MyLinkedList", "addAtHead", "addAtTail", "addAtIndex", "get", "deleteAtIndex", "get"]
[[], [1], [3], [1, 2], [1], [1], [1]]
輸出
[null, null, null, null, 2, null, 3]解釋
MyLinkedList myLinkedList = new MyLinkedList();
myLinkedList.addAtHead(1);
myLinkedList.addAtTail(3);
myLinkedList.addAtIndex(1, 2);    // 鏈表變為 1->2->3
myLinkedList.get(1);              // 返回 2
myLinkedList.deleteAtIndex(1);    // 現在,鏈表變為 1->3
myLinkedList.get(1);              // 返回 3

提示:

  • 0 <= index, val <= 1000
  • 請不要使用內置的 LinkedList 庫。
  • 調用 getaddAtHeadaddAtTailaddAtIndexdeleteAtIndex 的次數不超過 2000

思路

在這里插入圖片描述

在這里插入圖片描述

設置虛擬頭節點

class MyLinkedList {//一句話,一定要保證刪除cur.next,cur為待操作節點的前一個節點//size存儲鏈表元素的個數int size;//虛擬頭結點ListNode dummyHead;public MyLinkedList() {size = 0;dummyHead = new ListNode(0);}public int get(int index) {if(index<0 || index>size-1)return -1;ListNode cur = dummyHead;int i=0;while(i++<=index){cur = cur.next;}return cur.val;    }public void addAtHead(int val) {addAtIndex(0,val);}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 cur = dummyHead;for(int i=0;i<index;i++){cur = cur.next;}ListNode add = new ListNode(val);add.next = cur.next;cur.next = add;}public void deleteAtIndex(int index) {if(index<0 || index>=size)return;size--; //減少一個元素if(index==0){dummyHead = dummyHead.next;return;}ListNode cur = dummyHead;for(int i=0;i<index;i++){cur = cur.next;}//當遍歷到index-1的節點(尾節點)cur.next時,還有cur.next.nextcur.next = cur.next.next; //需要考慮邊界尾節點,index>=size}
}/*** Your MyLinkedList object will be instantiated and called as such:* MyLinkedList obj = new MyLinkedList();* int param_1 = obj.get(index);* obj.addAtHead(val);* obj.addAtTail(val);* obj.addAtIndex(index,val);* obj.deleteAtIndex(index);*/

時間復雜度: 涉及 index 的相關操作為 O(index), 其余為 O(1)

空間復雜度: O(n)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/719159.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/719159.shtml
英文地址,請注明出處:http://en.pswp.cn/news/719159.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

0101二階與三階行列式-行列式-線性代數

一 引例 求解二元一次方程組 { a 11 x 1 a 12 x 2 b 1 a 21 x 1 a 22 x 2 b 2 \begin{cases} a_{11}x_1a_{12}x_2b_1\\ a_{21}x_1a_{22}x_2b_2\\ \end{cases} {a11?x1?a12?x2?b1?a21?x1?a22?x2?b2?? 解&#xff1a; 1 a 21 ? 2 a 11 ? x 2 a 11 b 2 ? a…

Python函數的閉包

嵌套函數 在一個函數內部定義的函數稱為嵌套函數 閉包的形成 內層函數對外層函數非全局變量的引用就會形成閉包 閉包作用 保證數據安全 例子 li [] def average(value):li.append(value)return sum(li)/len(li) 如上面代碼li[]這個列表人人都能修改&#xff0c;這樣就…

自然語言處理實戰項目26-NLP模型訓練中前置應用之分詞方法的應用

大家好,我是微學AI,今天給大家介紹一下自然語言處理實戰項目26-NLP模型訓練中前置應用之分詞方法的應用。本文詳細介紹了自然語言處理(NLP)模型訓練中前置應用之分詞方法的應用。文章首先簡要概述了NLP的概念和分詞在其中的重要性。隨后,文章詳細介紹了四種主要的分詞方法…

MQL5學習之簡單移動平均線MA的編寫

昨天還是有點高估自己了&#xff0c;MACD相對較難一點&#xff0c;改學MA的編寫&#xff0c;首先明確MA的計算&#xff0c;假如有4個值&#xff0c;p[1&#xff0c;2&#xff0c; 3&#xff0c; 4], period3, 則v[0]p[0], v[1]p[1],v[2](p[0]p[1]p[2])/32, v[3](v[2]*3p[3]-p…

瀏覽器展示Blob/File文件

1. 瀏覽器展示Blob/File文件 I.Blob格式轉Base64格式 當我們接收到后端傳輸過來的文件時&#xff0c;很多時候我們需要將傳過來的文件轉為Base64格式。如后端傳來驗證碼圖片時等 下面將提供函數&#xff1a; // Blob轉Base64 export const blobToBase64 (blob: Blob) >ne…

ChatGPT論文指南|ChatGPT如何助力論文中的數據分析!【建議收藏】

點擊下方▼▼▼▼鏈接直達AIPaperPass &#xff01; AIPaperPass - AI論文寫作指導平臺 公眾號原文▼▼▼▼&#xff1a; ChatGPT論文指南|ChatGPT如何助力論文中的數據分析&#xff01;【建議收藏】 小編在之前的論文寫作流程中&#xff0c;介紹了大量論文文字工作&#xff…

Effective objective-c-- 內存管理

Effective objective-c-- 內存管理 前言理解引用計數引用計數工作原理屬性存取方法中的內存管理自動釋放池保留環要點 以ARC簡化引用計數使用ARC時必須遵循的方法和命名規則變量的內存管理語義ARC如何清理實例變量覆寫內存管理方法要點 在dealloc方法中只釋放引用并解除監聽要點…

Mybatis-Plus 5分鐘快速上手,10分鐘熟練使用

小伙伴們好&#xff0c;歡迎關注&#xff0c;一起學習&#xff0c;無限進步 以下為學習 mybatis-plus 過程中的筆記 mybatis-plus 官網地址&#xff1a;https://mp.baomidou.com/ 文章目錄 特性快速開始mybatis-plus 配置插入測試及雪花算法主鍵生成策略查詢更新刪除查詢指定字…

Text2SQL 和 智能問答 的提示詞寫法

Text2SQL 生成 Query SQL System Message You are a {dialect} expert. Given an input question, creat a syntactically correct {dialect} query to run. Unless the user specifies in the question a specific number of examples to obtain, query for at most {top_k} r…

Linux 創建.NET 服務

文章目錄 創建服務啟用服務啟動 & 重啟服務查看服務狀態問題排查 創建服務 將服務文件上傳到 /home/mes/api-mes-dev, 其他服務修改對應的目錄在 /usr/lib/systemd/system/ 創建 mesapi-dev.service, 其他服務修改對應文件名 [Unit] Descriptionmesapi-dev service[Servi…

探索Linux世界:初次接觸和基本指令(文件操作)

文章目錄 1.基本介紹和準備2.基本指令和Linux的基本操作3.幾個重要基本指令3.1 ls - 列出文件和目錄3.1.1文件的知識3.1.2 .和..文件 3.2pwd - 顯示當前工作目錄3.2.1路徑知識 3.3 cd - 切換目錄3.4 touch - 創建文件或更新時間戳3.5mkdir - 創建新目錄3.6rm - 刪除文件或目錄3…

leetcode熱題100學習計劃-鏈表-反轉鏈表

思路 使用頭插法逆轉鏈表 注&#xff1a;鏈表一般為操作方便&#xff0c;頭結點不存值&#xff0c;是一個虛擬節點 代碼 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val)…

深入了解 Android 中的 FrameLayout 布局

FrameLayout 是 Android 中常用的布局之一&#xff0c;它允許子視圖堆疊在一起&#xff0c;可以在不同位置放置子視圖。在這篇博客中&#xff0c;我們將詳細介紹 FrameLayout 的屬性及其作用。 <FrameLayout xmlns:android"http://schemas.android.com/apk/res/androi…

【數據結構和算法初階(C語言)】帶環鏈表問題詳解(快慢指針的燒腦應用)

目錄 1.鋪墊-----帶環鏈表基本了解 2. 題目&#xff1a;環形鏈表 3.環形鏈表|| ?編輯 3.1題解1 3.2 題解2 4.總結 1.鋪墊-----帶環鏈表基本了解 環形鏈表題目啟迪&#xff1a; 環形鏈表特點&#xff1a;遍歷鏈表會出現一模一樣的地址 2. 題目&#xff1a;環形鏈表 給…

數字化轉型導師鵬:政府數字化轉型政務服務類案例研究

政府數字化轉型政務服務類案例研究 課程背景&#xff1a; 很多地方政府存在以下問題&#xff1a; 不清楚標桿省政府數字化轉型的政務服務類成功案例 不清楚地級市政府數字化轉型的政務服務類成功案例 不清楚縣區級政府數字化轉型的政務服務類成功案例 課程特色&#x…

基于C語言實現內存型數據庫(kv存儲)

基于C語言實現內存型數據庫(kv存儲) 文章目錄 基于C語言實現內存型數據庫(kv存儲)1. 項目背景1.1 Redis介紹1.2 項目預期及基本架構 2. 服務端原理及代碼框架2.1 網絡數據回環的實現2.2 array的實現2.3 rbtree的實現2.4 btree的實現2.5 hash的實現2.6 dhash的實現2.7 skiplist的…

XV4001KC數字輸出 車載用(piezoman)

EPSON的XV4001KC角速度傳感器是為滿足汽車行業對高精度和高可靠性需求而設計的。它不僅提供了高級的運動監測特性&#xff0c;高精度的角速度測量和溫度監測功能&#xff0c;而且其緊湊的設計6.04.83.3mm尺寸對于空間受限的車載環境來說&#xff0c;是一大優勢&#xff0c;使得…

二十篇esp345

from machine import I2C,Pin from ssd1306 import SSD1306_I2C i2c I2C(sdaPin(“Y8”), sclPin(“Y6”)) oled SSD1306_I2C(128, 64, i2c, addr0x3c) oled.text(“Hello World!”, 0, 0) oled.text(“MicroPython”, 0, 20) oled.text(“By 01Studio”, 0, 50) oled.show()…

vue 中在子頁面中使用watch監聽父頁面數據而導致接口多次調用

vue 中在子頁面中使用watch監聽父頁面數據而導致接口多次調用 解決方式 debounce function debounce(func, delay) {let timerId;return function(...args) {clearTimeout(timerId);timerId setTimeout(() > {func.apply(this, args);}, delay);}; }watch中 watch:{監聽值…

AIGC 知識:機器學習中的“微調“和“遷移學習“有什么區別?

以下是關于**微調 (fine-tuning)和遷移學習 (Transfer learning)**的區別&#xff0c;涉及到機器學習和深度學習的上下文&#xff1a; 遷移學習&#xff1a; 概述&#xff1a;遷移學習涉及使用預訓練模型作為新任務或領域的起點。目標&#xff1a;利用預訓練模型在大型數據集上…