算法(8)-leetcode-explore-learn-数据结构-链表
leetcode-explore-learn-數(shù)據(jù)結(jié)構(gòu)-鏈表1
- 1.概述
- 1.1 鏈表插入操作
- 1.2 鏈表刪除操作
- 2.設(shè)計(jì)鏈表
本系列博文為leetcode-explore-learn子欄目學(xué)習(xí)筆記,如有不詳之處,請(qǐng)參考leetcode官網(wǎng):https://leetcode-cn.com/explore/learn/card/linked-list/
所有例題的編程語(yǔ)言為python
1.概述
鏈表是一種線性結(jié)構(gòu),每個(gè)元素都是一個(gè)單獨(dú)對(duì)象,所有的對(duì)象通過(guò)每個(gè)元素的引用字段鏈接在一起。
鏈表包括單鏈表和雙鏈表,本文主要記錄單鏈表的相關(guān)內(nèi)容。
單鏈表的每個(gè)節(jié)點(diǎn)包含兩個(gè)部分的內(nèi)容–鏈接到下一個(gè)結(jié)點(diǎn)的引用字段和值
Python中單鏈表節(jié)點(diǎn)的結(jié)構(gòu)
class SinglyListNode(object,val):def __init__(self,val):self.val=valself.next=None大多數(shù)情況下,我們使用頭結(jié)點(diǎn)來(lái)表示整個(gè)列表。
與數(shù)組不同,訪問(wèn)單鏈表的中的元素需要的時(shí)間復(fù)雜度為0(n),從頭結(jié)點(diǎn)開(kāi)始,往后逐個(gè)遍歷。
鏈表的主要優(yōu)點(diǎn):插入和刪除操作很便利
1.1 鏈表插入操作
(1)用給定值初始化新結(jié)點(diǎn)cur
(2)將cur的Next字段鏈接到prev的下一個(gè)結(jié)點(diǎn)next
(3)將prev的next字段鏈接到cur結(jié)點(diǎn)
相比與數(shù)組添加新的元素(需要插入元素后續(xù)位置元素往后移動(dòng)),鏈表插入操作可以實(shí)現(xiàn)o(1)的時(shí)間復(fù)雜度。
在列表的開(kāi)頭添加新節(jié)點(diǎn)更新head關(guān)重要。
(1)初始化一個(gè)新節(jié)點(diǎn)cur
(2)將新節(jié)點(diǎn)鏈接到原始head節(jié)點(diǎn)指向的下一個(gè)結(jié)點(diǎn)
(3)更新head節(jié)點(diǎn)指向cur
1.2 鏈表刪除操作
要求刪除給定節(jié)點(diǎn)cur
(1)找到cur節(jié)點(diǎn)的上一個(gè)結(jié)點(diǎn)prev和下一個(gè)結(jié)點(diǎn)next;
(2)將pre的next字段鏈接至next結(jié)點(diǎn)
找到cur結(jié)點(diǎn)的prev結(jié)點(diǎn)的時(shí)間復(fù)雜度為o(n),找到cur的下結(jié)點(diǎn)時(shí)間復(fù)雜度o(1),所以總體時(shí)間復(fù)雜度為o(n)
空間復(fù)雜度為0(1)。
刪除第一個(gè)節(jié)點(diǎn):直接將第二個(gè)節(jié)點(diǎn)分配給head
2.設(shè)計(jì)鏈表
設(shè)計(jì)鏈表的實(shí)現(xiàn)。單鏈表節(jié)點(diǎn)有兩個(gè)熟悉:val、next。val是當(dāng)前節(jié)點(diǎn)的值,next是指向下一個(gè)結(jié)點(diǎn)的指針/引用。
在鏈表中實(shí)現(xiàn):
1.get(index):獲取鏈表的第index個(gè)節(jié)點(diǎn),如果索引無(wú)效,則返回-1(index 從0開(kāi)始)
2.addAtHead(val):在鏈表的第一個(gè)結(jié)點(diǎn)前添加一個(gè)值為val的結(jié)點(diǎn)。插入后,新節(jié)點(diǎn)將成為鏈表的第一個(gè)結(jié)點(diǎn)
3.addAtTail:將值為val的節(jié)點(diǎn)追加到鏈表的最后一個(gè)元素
4.addAtIndex(index,val):在鏈表的第index個(gè)節(jié)點(diǎn)前添加值為val的結(jié)點(diǎn)。如果index為鏈表的長(zhǎng)度,則將該結(jié)點(diǎn)按附加到鏈表的末尾。如果index大于鏈表長(zhǎng)度,則不會(huì)插入節(jié)點(diǎn)。如果index小于0,則在頭部插入節(jié)點(diǎn)。
5.deleteAtIndex(index):如果索引有效則刪除鏈表的第index個(gè)結(jié)點(diǎn)。
總結(jié)
以上是生活随笔為你收集整理的算法(8)-leetcode-explore-learn-数据结构-链表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python(11)-if语句,断言as
- 下一篇: 算法(19)-leetcode-剑指of