雙向鏈表:
###################### P4.13-P4. 雙向鏈表 ###########################
# import singlelinkList
class Node(object):
def __init__(self,item):
self.elem = item
self.next = None
self.prev = None
# class DoublelinkList(singlelinkList): #繼承
class DoublelinkList(object):
def __init__(self, node = None):
self.__head = node
def is_empty(self):
return self.__head is None
def travel(self):
cur = self.__head
while cur.next != None:
print(cur.elem, end=" ")
cur= cur.next
print("")
def length(self):
"""length of list 遍歷 藉助 Cursor 指針或者遊標計數"""
cur = self.__head
count = 0
while cur != None:# cur.next = None
count+=1
cur = cur.next
return count
def add(self, item):
node = Node(item)
node.next = self.__head
self.__head = node
node.next.prev = node
def append(self, item):
node = Node(item) # node 實例化
if self.is_empty():
self._head = node
else:
cur = self.__head
while cur.next != None:
cur = cur.next
cur.next = node
node.prev = cur
def insert(self, pos, item):
""":param pos 從0 開始 """
if pos < 0:
self.add(item)
elif pos > (self.length() - 1):
self.append(item)
else:
cur = self.__head
count =0
while (count < pos):
count += 1
cur = cur.next
node = Node(item)
node.next = cur
node.prev = cur.prev
cur.prev = node
cur.prev.next = node
def remove(self, item):
cur = self.__head
while cur != None:
if cur.elem == item:
if cur == self.__head:
self.__head = cur.next
if cur.next:
cur.next.prev = None
else:
cur.prev.next = cur.next
if cur.next:
cur.next.prev = cur.prev
break
else:
pre = cur
cur = cur.next
def search(self, item):
cur = self.__head
while cur != None:
if cur.elem == item:
return True
else:
cur = cur.next
return False
if __name__ =="__main__":
ll = DoublelinkList()
print(ll.is_empty())
print(ll.length())
ll.append(1)
print(ll.is_empty())
print(ll.length())
ll.append(2)
# ll.add(8)
ll.append(3)
ll.append(4)
ll.append(5)
ll.append(6)
ll.insert(-1, 9)
ll.insert(3, 100)
ll.insert(8, 1234)
ll.travel()
### 9 8 1 3 119 1 3 1234
ll.remove(1234)
ll.travel()