環形連結串列(python3)
# 環形連結串列----------------------------------------
class AnnularList:
def __init__(self, value):
self.elem = value
self.next = None
class AnnularListHandle:
def __init__(self):
self.front = None
self.rear = None
self._length = 0
def insert_node(self, value, position, times) : # 增加節點
if position is not None: # 指定前端插入還是後端插入
if position == o: # 前端插入
p = AnnularList(value)
p.next = self.front
self.front = p.elem
self.rear.next = self.front
self._length = self._length - 1
return
elif position == 1: # 後端插入
p = AnnularList(value)
p.next = self.front
self.rear = p.elem
self._length = self._length - 1
return
else:
print('呼叫錯誤')
return
elif times is not None: # 指定位置節點插入
if times == 0: # 在首端插入節點
p = AnnularList(value)
p.next = self.front
self.front = p.elem
self.rear.next = self.front
self._length = self._length - 1
return
elif times == self._length: # 在尾端插入節點
p = AnnularList(value)
p.next = self.front
self.rear.next = p.elem
self._length = self._length - 1
return
elif type(times) is Number: # 在中間插入節點(除首端和尾端)
p_new = AnnularList(value)
temp = 0
p_1 = self.front
while temp == times - 1:
p_1 = p_1.next
temp += 1
p_2 = p_1.next
p_1.next = p_new
p_new.next = p_2
self._length = self._length + 1
return
else: # 輸入的times不是數字型別
print('呼叫錯誤')
return
else:
print('呼叫錯誤')
return
def ergodic_list(self): # 遍歷環形連結串列
p = self.front
temp = 0
while temp < self._length:
print(p.elem)
p = p.next
return
def delete_node(self, value): # 刪除節點
if self.front.elem == value: # 刪除的值在首節點
self.front = self.front.next
self.rear.next = self.front.elem
self._length = self._length - 1
elif self.rear.elem == value: # 刪除的值在尾節點
p = self.front
temp = 0
while temp < self._length:
p = p.next
self.rear = p.elem
self.rear.next = self.front
self._length = self._length - 1
else: # 刪除的值在中間(除尾部和首部)
p_1 = self.front
p_2 = p_1.next
n = 0
while p_2 != self.rear:
if value == p.elem.next:
p.next = p.next.next
n += 1
p = p.next
p = p.next
return
def reversal_list(self): # 反轉環形連結串列
p_1 = self.head
p = self.head
p_2 = p_1.next
p_1.next = None
while p.next is not None:
p_2.next = p_1.elem
p_1 = p_1.next
p_2 = p_2.next
p.head = p_2.elem
return
相關推薦
環形連結串列(python3)
# 環形連結串列---------------------------------------- class AnnularList: def __init__(self, value): self.elem = value
LeetCode-初級-連結串列-環形連結串列(JavaScript)
給定一個連結串列,判斷連結串列中是否有環。 進階: 你能否不使用額外空間解決此題? 思路: 設定兩個指標p1,p2。 p1每次走一步,p2每次走兩步。 若沒有環,則兩者不會碰到,若有環,則必然會碰到。 /** * Definition for singly-li
Leetcode 141:環形連結串列(最詳細的解法!!!)
給定一個連結串列,判斷連結串列中是否有環。 進階: 你能否不使用額外空間解決此題? 解題思路 一個最簡單的做法就是將連結串列反轉,我們看連結串列反轉後有什麼問題,關於連結串列反轉可以看這篇Leetcode 206:反轉連結串列(最詳細解決方案!!!)。 1 -> 2
領釦——141環形連結串列(快慢指標)
給定一個連結串列,判斷連結串列中是否有環。 /** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x)
LeetCode題目--環形連結串列(python實現)
題目 給定一個連結串列,判斷連結串列中是否有環。 進階: 你能否不使用額外空間解決此題? python程式碼實現: # Definition for singly-linked list. # class ListNode(object): # def
Leetcode題解之連結串列(6) 環形連結串列
題目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/6/linked-list/46/ 題目描述: 給定一個連結串列,判斷連結串列中是否有環。 進階: 你能否不使用額外空間解決此
【LeetCode】141. 環形連結串列(Linked List Cycle)
【 英文練習 | 中文練習 】 題目描述: 給定一個連結串列,判斷連結串列中是否有環。 解題思路: 一種方法可以使用 Hash Table ,判斷該結點之前是否遇到過;更優的方法是使用雙指標,一個指標每次移動一個結點,一個指標每次移動兩個結點,如果存在環,那麼這兩個指標一定會相遇
環形連結串列||(leetcode中級篇一百四十二題)
給定一個連結串列,返回連結串列開始入環的第一個節點。 如果連結串列無環,則返回 null。 說明:不允許修改給定的連結串列。 程式碼如下 struct ListNode *getIntersectionNode(struct ListNode *headA, stru
環形連結串列(leetcode簡單篇一百四十一題)
給定一個連結串列,判斷連結串列中是否有環 拿到這道題其實我相信很多同學已經看過官方的解答了 快慢指標法:在返回單鏈表的中間節點其實我們就已經使用過這個辦法了,讓fast指標一次走倆步,讓slow指標一次走一步。你可以假想倆個人同時在操場上跑步,快的那個人假設一直比慢的快,那麼在不久後
演算法 - 06 | 連結串列(上):如何實現LRU快取淘汰演算法?
連結串列的一個景點應用場景 --- LRU快取淘汰演算法 1. 快取 什麼是快取 快取是一種提高資料讀取效能的技術,在硬體設計、軟體開發中都有著非常廣泛的應用,比如常見的CPU快取、資料庫快取、瀏覽器快取等等。 快取淘汰策略 快取大小有限,當快取被用滿是,那些資料應該被清理出去,那些資料被
Chapter 6 連結串列(上):如何實現LRU快取淘汰演算法?
快取淘汰策略: 一、什麼是連結串列? 1.和陣列一樣,連結串列也是一種線性表。 2.從記憶體結構來看,連結串列的記憶體結構是不連續的記憶體空間,是將一組零散的記憶體塊串聯起來,從而進行資料儲存的資料結構。 3.連結串列中的每一個記憶體塊被稱為節點Node。節點除了儲存資料外,還需記錄鏈
連結串列(下):如何輕鬆寫出正確的連結串列程式碼?
本文是學習演算法的筆記,《資料結構與演算法之美》,極客時間的課程 寫好連結串列程式碼 技巧一、理解指標或引用的含義 不管是C語言中指標的含義,還是JAVA語言中引用的概念,它們的意思是一樣的,都是儲存所指物件的記憶體地址。 編寫連結串列程式碼的時候,這樣的程式碼: p -&g
連結串列(上):如何實現LRU快取淘汰演算法?
本文是學習演算法的筆記,《資料結構與演算法之美》,極客時間的課程 連結串列(Linked list) 快取技術是一種提高資料讀取效能的技術,應用廣泛。快取的大小有限,當快取被用滿的時候,哪些資料應該被保留?這需要快取淘汰策略來決定。 常見的策略有三種: 先進先出策略FIFO(
LeeCode——中級演算法——連結串列——奇偶連結串列(JavaScript)
給定一個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意,這裡的奇數節點和偶數節點指的是節點編號的奇偶性,而不是節點的值的奇偶性。 請嘗試使用原地演算法完成。你的演算法的空間複雜度應為 O(1),時間複雜度應為 O(nodes),nodes 為節點總數。 示例 1: 輸入:
LeetCode: 160.相交連結串列(JavaScript)
編寫一個程式,找到兩個單鏈表相交的起始節點。 例如,下面的兩個連結串列: A: a1 → a2 ↘ c1 → c2 → c3 ↗
《劍指offer》系列 二叉搜尋樹與雙向連結串列(Java)
連結 牛客: 二叉搜尋樹與雙向連結串列 題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。 思路 這個程式碼是借鑑網上的,整體結構和中序遍歷非常類似,只不過將原本輸出那部分的操作換成了改變結
劍指Offer-連結串列-(4)
知識點/資料結構:連結串列 題目描述: 輸入兩個單調遞增的連結串列,輸出兩個連結串列合成後的連結串列,當然我們需要合成後的連結串列滿足單調不減規則。 思路: 從合併兩個連結串列的頭節點開始,連結串列1的頭節點的值小於連結串列2的頭節點的值,因此連結串列1的頭節點監視合併後連結串列
劍指Offer-連結串列-(3)
知識點/資料結構:連結串列 題目描述: 輸入一個連結串列,反轉連結串列後,輸出新連結串列的表頭。 可能的測試案例: (1)輸入的連結串列頭指標是nullptr; (2)輸入的連結串列只有一個節點; (3)輸入的連結串列有多個節點; 思路:為了正確的反轉一個連結串列,需要調整連結串
劍指Offer-連結串列-(2)
知識點/資料結構:連結串列 題目描述 輸入一個連結串列,輸出該連結串列中倒數第k個結點。 思路:如下圖 程式碼如下: /* public class ListNode { int val; ListNode next = null; ListNod
三、連結串列(實踐)
絮絮叨叨 如何輕鬆寫連結串列的程式碼? 有決心並付出精力 理解指標或引用的含義 將某個變數賦值給指標,實際上就是將這個變數的地址賦值給指標,或者反過來說,指標中儲存了這個變數的記憶體地址,指向了這個變數,通過指標就能找到這個變數。