選單
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

DSA 連結串列型別


連結串列型別

連結串列有三種基本形式

  1. 單向連結串列
  2. 雙向連結串列
  3. 迴圈連結串列

單向連結串列是最簡單的連結串列型別。它佔用的記憶體空間較少,因為每個節點只有一個指向下一個節點的地址,如下圖所示。

A singly linked list.

雙向連結串列的節點同時包含指向前一個節點和下一個節點的地址,如下圖所示,因此佔用的記憶體更多。但雙向連結串列適合需要雙向遍歷列表的場景。

A doubly linked list.

迴圈連結串列類似於單向或雙向連結串列,但第一個節點(“頭”)和最後一個節點(“尾”)相互連線。

在單向或雙向連結串列中,我們可以透過檢查連結是否為 null 來找到列表的開始和結束。但對於迴圈連結串列,在某些應用程式中需要更復雜的程式碼來顯式檢查開始和結束節點。

迴圈連結串列適用於需要連續迴圈遍歷的列表。

下圖是一個單向迴圈連結串列的例子

A circular singly linked list.

下圖是一個雙向迴圈連結串列的例子

A circular doubly linked list.

注意:您需要的連結串列型別取決於您要解決的問題。


連結串列實現

以下是基本實現的

  1. 單向連結串列
  2. 雙向連結串列
  3. 迴圈單向連結串列
  4. 迴圈雙向連結串列

下一頁將介紹連結串列可以執行的不同操作。


1. 單向連結串列實現

以下是此單向連結串列的實現

A singly linked list with values.

示例

Python 中的基本單向連結串列

(這是與上一頁底部相同的示例。)

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None
    
node1 = Node(3)
node2 = Node(5)
node3 = Node(13)
node4 = Node(2)

node1.next = node2
node2.next = node3
node3.next = node4

currentNode = node1
while currentNode:
    print(currentNode.data, end=" -> ")
    currentNode = currentNode.next
print("null")
執行示例 »

2. 雙向連結串列實現

以下是此雙向連結串列的實現

A doubly linked list with values.

示例

Python 中的基本雙向連結串列

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None
        self.prev = None
    
node1 = Node(3)
node2 = Node(5)
node3 = Node(13)
node4 = Node(2)

node1.next = node2

node2.prev = node1
node2.next = node3

node3.prev = node2
node3.next = node4

node4.prev = node3

print("\nTraversing forward:")
currentNode = node1
while currentNode:
    print(currentNode.data, end=" -> ")
    currentNode = currentNode.next
print("null")

print("\nTraversing backward:")
currentNode = node4
while currentNode:
    print(currentNode.data, end=" -> ")
    currentNode = currentNode.prev
print("null")
執行示例 »


3. 迴圈單向連結串列實現

以下是此迴圈單向連結串列的實現

A circular singly linked list with values.

示例

Python 中的基本迴圈單向連結串列

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None
    
node1 = Node(3)
node2 = Node(5)
node3 = Node(13)
node4 = Node(2)

node1.next = node2
node2.next = node3
node3.next = node4
node4.next = node1

currentNode = node1
startNode = node1
print(currentNode.data, end=" -> ") 
currentNode = currentNode.next 

while currentNode != startNode:
    print(currentNode.data, end=" -> ")
    currentNode = currentNode.next

print("...")
執行示例 »

第 14 行:這使得單向列表成為迴圈的。

第 17 行:程式透過此方式知道何時停止,以便它只遍歷列表一次。


4. 迴圈雙向連結串列實現

以下是此迴圈雙向連結串列的實現

A circular doubly linked list with values.

示例

Python 中的基本迴圈雙向連結串列

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None
        self.prev = None

node1 = Node(3)
node2 = Node(5)
node3 = Node(13)
node4 = Node(2)

node1.next = node2
node1.prev = node4

node2.prev = node1
node2.next = node3

node3.prev = node2
node3.next = node4

node4.prev = node3
node4.next = node1

print("\nTraversing forward:")
currentNode = node1
startNode = node1
print(currentNode.data, end=" -> ")
currentNode = currentNode.next

while currentNode != startNode:
    print(currentNode.data, end=" -> ")
    currentNode = currentNode.next
print("...")

print("\nTraversing backward:")
currentNode = node4
startNode = node4
print(currentNode.data, end=" -> ")
currentNode = currentNode.prev

while currentNode != startNode:
    print(currentNode.data, end=" -> ")
    currentNode = currentNode.prev
print("...")
執行示例 »

第 13 行和第 22 行:這些連結使雙向連結串列成為迴圈的。

第 26 行:程式透過此方式知道何時停止,以便它只遍歷列表一次。


DSA 練習

透過練習來測試自己

練習

看一下這個單向連結串列

A singly Linked List

如何使這個連結串列成為迴圈的?

The list can be made circular 
by connecting the next pointer 
in the last node, to the  node.

開始練習



×

聯絡銷售

如果您想將 W3Schools 服務用於教育機構、團隊或企業,請傳送電子郵件給我們
sales@w3schools.com

報告錯誤

如果您想報告錯誤,或想提出建議,請傳送電子郵件給我們
help@w3schools.com

W3Schools 經過最佳化,旨在方便學習和培訓。示例可能經過簡化,以提高閱讀和學習體驗。教程、參考資料和示例會不斷審查,以避免錯誤,但我們無法保證所有內容的完全正確性。使用 W3Schools 即表示您已閱讀並接受我們的使用條款Cookie 和隱私政策

版權所有 1999-2024 Refsnes Data。保留所有權利。W3Schools 由 W3.CSS 提供支援