<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 雙向鏈表 一種更復雜的鏈表是“雙向鏈表”或“雙面鏈表”。每個節點有兩個鏈接:一個指向前一個節點,當此節點為第一個節點時,指向空值;而另一個指向下一個節點,當此節點為最后一個節點時,指向空值。 ![](https://box.kancloud.cn/5cffd9a9b78f50287cbf31906e8f65a0_1354x344.png) ### 操作 * is_empty() 鏈表是否為空 * length() 鏈表長度 * travel() 遍歷鏈表 * add(item) 鏈表頭部添加 * append(item) 鏈表尾部添加 * insert(pos, item) 指定位置添加 * remove(item) 刪除節點 * search(item) 查找節點是否存在 ### 實現 ~~~ class Node(object): """雙向鏈表節點""" def __init__(self, item): self.item = item self.next = None self.prev = None class DLinkList(object): """雙向鏈表""" def __init__(self): self._head = None def is_empty(self): """判斷鏈表是否為空""" return self._head == None def length(self): """返回鏈表的長度""" cur = self._head count = 0 while cur != None: count += 1 cur = cur.next return count def travel(self): """遍歷鏈表""" cur = self._head while cur != None: print cur.item, cur = cur.next print "" def add(self, item): """頭部插入元素""" node = Node(item) if self.is_empty(): # 如果是空鏈表,將_head指向node self._head = node else: # 將node的next指向_head的頭節點 node.next = self._head # 將_head的頭節點的prev指向node self._head.prev = node # 將_head 指向node self._head = node def append(self, item): """尾部插入元素""" node = Node(item) if self.is_empty(): # 如果是空鏈表,將_head指向node self._head = node else: # 移動到鏈表尾部 cur = self._head while cur.next != None: cur = cur.next # 將尾節點cur的next指向node cur.next = node # 將node的prev指向cur node.prev = cur def search(self, item): """查找元素是否存在""" cur = self._head while cur != None: if cur.item == item: return True cur = cur.next return False ~~~ **指定位置插入節點** ![](https://box.kancloud.cn/4d5dc222afe84fdc6c8bf753cdf14301_1488x590.png) ~~~ 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的prev指向cur node.prev = cur # 將node的next指向cur的下一個節點 node.next = cur.next # 將cur的下一個節點的prev指向node cur.next.prev = node # 將cur的next指向node cur.next = node ~~~ **刪除元素** ![](https://box.kancloud.cn/9a81a95f6581f7956c6d6a9371349a8a_1210x282.png) ~~~ def remove(self, item): """刪除元素""" if self.is_empty(): return else: cur = self._head if cur.item == item: # 如果首節點的元素即是要刪除的元素 if cur.next == None: # 如果鏈表只有這一個節點 self._head = None else: # 將第二個節點的prev設置為None cur.next.prev = None # 將_head指向第二個節點 self._head = cur.next return while cur != None: if cur.item == item: # 將cur的前一個節點的next指向cur的后一個節點 cur.prev.next = cur.next # 將cur的后一個節點的prev指向cur的前一個節點 cur.next.prev = cur.prev break cur = cur.next ~~~ **測試** ~~~ if __name__ == "__main__": ll = DLinkList() 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(4) ll.remove(1) print "length:",ll.length() ll.travel() ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看