Python實現的單向迴圈鏈表功能樣本,python實現樣本

來源:互聯網
上載者:User

Python實現的單向迴圈鏈表功能樣本,python實現樣本

本文執行個體講述了Python實現的單向迴圈鏈表功能。分享給大家供大家參考,具體如下:

概述:

單向迴圈鏈表是指在單鏈表的基礎上,表的最後一個元素指向鏈表頭結點,不再是為空白。

由圖可知,單向迴圈鏈表的判斷條件不再是表為空白了,而變成了是否到表頭。

操作

is_empty() 判斷鏈表是否為空白
length() 返回鏈表的長度
travel() 遍曆
add(item) 在頭部添加一個節點
append(item) 在尾部添加一個節點
insert(pos, item) 在指定位置pos添加節點
remove(item) 刪除一個節點
search(item) 尋找節點是否存在

具體代碼:

class Node(object):  """節點"""  def __init__(self, item):    self.item = item    self.next = Noneclass SinCycLinkedlist(object):  """單向迴圈鏈表"""  def __init__(self):    self._head = None  def is_empty(self):    """判斷鏈表是否為空白"""    return self._head == None  def length(self):    """返回鏈表的長度"""    # 如果鏈表為空白,返回長度0    if self.is_empty():      return 0    count = 1    cur = self._head    while cur.next != self._head:      count += 1      cur = cur.next    return count  def travel(self):    """遍曆鏈表"""    if self.is_empty():      return    cur = self._head    print cur.item,    while cur.next != self._head:      cur = cur.next      print cur.item,    print ""  def add(self, item):    """頭部添加節點"""    node = Node(item)    if self.is_empty():      self._head = node      node.next = self._head    else:      #添加的節點指向_head      node.next = self._head      # 移到鏈表尾部,將尾部節點的next指向node      cur = self._head      while cur.next != self._head:        cur = cur.next      cur.next = node      #_head指向添加node的      self._head = node  def append(self, item):    """尾部添加節點"""    node = Node(item)    if self.is_empty():      self._head = node      node.next = self._head    else:      # 移到鏈表尾部      cur = self._head      while cur.next != self._head:        cur = cur.next      # 將尾節點指向node      cur.next = node      # 將node指向前端節點_head      node.next = self._head  def insert(self, pos, item):    """在指定位置添加節點"""    if pos <= 0:      self.add(item)    elif pos > (self.length()-1):      self.append(item)    else:      node = Node(item)      cur = self._head      count = 0      # 移動到指定位置的前一個位置      while count < (pos-1):        count += 1        cur = cur.next      node.next = cur.next      cur.next = node  def remove(self, item):    """刪除一個節點"""    # 若鏈表為空白,則直接返回    if self.is_empty():      return    # 將cur指向前端節點    cur = self._head    pre = None    # 若前端節點的元素就是要尋找的元素item    if cur.item == item:      # 如果鏈表不止一個節點      if cur.next != self._head:        # 先找到尾節點,將尾節點的next指向第二個節點        while cur.next != self._head:          cur = cur.next        # cur指向了尾節點        cur.next = self._head.next        self._head = self._head.next      else:        # 鏈表只有一個節點        self._head = None    else:      pre = self._head      # 第一個節點不是要刪除的      while cur.next != self._head:        # 找到了要刪除的元素        if cur.item == item:          # 刪除          pre.next = cur.next          return        else:          pre = cur          cur = cur.next      # cur 指向尾節點      if cur.item == item:        # 尾部刪除        pre.next = cur.next  def search(self, item):    """尋找節點是否存在"""    if self.is_empty():      return False    cur = self._head    if cur.item == item:      return True    while cur.next != self._head:      cur = cur.next      if cur.item == item:        return True    return Falseif __name__ == "__main__":  ll = SinCycLinkedlist()  ll.add(1)  ll.add(2)  ll.append(3)  ll.insert(2, 4)  ll.insert(4, 5)  ll.insert(0, 6)  print "length:",ll.length()  ll.travel()  print ll.search(3)  print ll.search(7)  ll.remove(1)  print "length:",ll.length()  ll.travel()

運行結果:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.