1. 程式人生 > >環形連結串列(python3)

環形連結串列(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

三、連結串列實踐

絮絮叨叨 如何輕鬆寫連結串列的程式碼? 有決心並付出精力 理解指標或引用的含義 將某個變數賦值給指標,實際上就是將這個變數的地址賦值給指標,或者反過來說,指標中儲存了這個變數的記憶體地址,指向了這個變數,通過指標就能找到這個變數。