麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Python > 正文

python單向循環鏈表原理與實現方法示例

2024-09-09 19:02:54
字體:
來源:轉載
供稿:網友

本文實例講述了python單向循環鏈表原理與實現方法。分享給大家供大家參考,具體如下:

單向循環鏈表

單鏈表的一個變形是單向循環鏈表,鏈表中最后一個節點的next域不再為None,而是指向鏈表的頭節點。

操作

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

實現

# -*- coding:utf-8 -*-#! python3class 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    while cur.next != self.__head:      if cur.item == item:        # 先判斷此結點是否是頭節點        if cur == self.__head:          # 頭節點的情況          # 找尾節點          rear = self.__head          while rear.next != self.__head:            rear = rear.next          self.__head = cur.next          rear.next = self.__head        else:          # 中間節點          pre.next = cur.next        return      else:        pre = cur        cur = cur.next    # 退出循環,cur指向尾節點    if cur.item == item:      if cur == self.__head:        # 鏈表只有一個節點        self.__head = None      else:        # pre.next = cur.next        pre.next = self.__head  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()
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久美女免费视频 | 欧美综合在线观看视频 | 一级免费黄色免费片 | 日本在线播放一区 | 久久新网址 | 九九视屏 | 深夜影院一级毛片 | 成人在线视频播放 | 精品一区二区久久久久久久网精 | fc2国产成人免费视频 | 色97在线| 久久蜜桃香蕉精品一区二区三区 | 草草久久久 | 日产精品一区二区三区在线观看 | 国产精品视频一区二区三区四区五区 | 成人在线免费看 | 久久久久久久久久亚洲精品 | 欧美一级特黄aaaaaa在线看首页 | 免费一区区三区四区 | 久久中文一区 | 久久国产亚洲精品 | a视频在线播放 | 精品久久久久久久久久中文字幕 | 国产精品99精品 | 国产自在自线午夜精品视频在 | 欧美日韩综合视频 | 久久国产精品久久久久久 | 久久99国产精品久久99果冻传媒 | 一区二区三区视频在线播放 | 国产午夜精品在线 | 久久久久久免费 | 精品成人国产在线观看男人呻吟 | 九九热久久免费视频 | 亚洲午夜在线视频 | 精品99在线视频 | 精品久久久久久亚洲精品 | 欧美日韩亚洲在线 | 久久综合久久精品 | 国产高潮好爽受不了了夜色 | 精品国产一区二区三区四区阿崩 | 国产美女爽到喷白浆的 |