1. 程式人生 > 實用技巧 >迴圈連結串列結構

迴圈連結串列結構

在單鏈表結構上,在第1個節點插入和刪除,只不過是第i個節點的插入和刪除的特殊情況。這些情況只所以特殊,是因為head指標必須重置。可以使用一個帶有啞頭節點迴圈連結串列結構來簡化這些操作。迴圈連結串列結構包含了從結構中的最後一個節點返回到第一個節點的連結。在這個實現中,至少總是有一個節點。這個節點也就是啞頭節點(dummy header node),它不包含資料,但是充當了連結串列結構的開頭和結尾的一個標記。一開始的時候,在空的連結串列結構中,head指標指向了啞頭節點,且啞頭節點的next指標指回到了啞頭節點自身,結構如下圖所示:

第一個包含了資料的節點。位於啞頭節點之後。這個節點的next指標以迴圈的方式,指回了啞頭節點,如下圖所示:

對第i個節點的搜尋,從啞頭節點之後的節點開始。假設這個空的連結串列的最初結構如下所示:

# coding: utf-8
class Node(object):
    def __init__(self, data, next=None):
        self.data = data
        self.next = next

head = Node(None, None)
head.next = head

如下是第i個位置插入節點的程式碼,它使用了這個連結串列結構的新的表示:

# coding: utf-8
class Node(object):
    def __init__(self, data, next
=None): self.data = data self.next = next head = Node(None, None) head.next = head for i in range(1,10): head = Node(i, head) probe = head index =5 newItem = 100 while index > 0 and probe.next != head: probe = probe.next print probe.next,probe.data index -= 1 probe.next
= Node(newItem, probe.next) print probe.next.next,probe.next.data

這種實現的優點在於,插入和刪除操作只需要考慮一種情況,即第i個節點位於當前的第i個節點和它的前一個節點之間的這種情況。當第i個節點是第1個節點的時候,它之前的節點就是頭節點。當i>=n,之前的節點就是最後一個節點,並且頭節點是其下一個節點。

結束!