#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time: 2020-Jul-09# @Author: xiaofuclassNode(object):def__init__(self, value):
self.value = value
self.next=None
self.prev =NoneclassDoubleLinkedList(object):def__init__(self, node=None):
self.__head = node
defisEmpty(self):"""check if the list is empty"""return self.__head isNonedeflength(self):"""length of the list"""# cur is current position
cur = self.__head
count =0while cur !=None:
cur = cur.next
count +=1return count
deftravel(self):"""traverse through the list"""# cur is current position
cur = self.__head
while cur !=None:print(cur.value, end=" ")
cur = cur.nextprint('')defshift(self, value):"""add a node to the start"""
node = Node(value)if self.isEmpty()==True:
self.__head = node
else:# link before break
node.next= self.__head
self.__head.prev = node
self.__head = node
defappend(self, value):"""add a node to the end"""
node = Node(value)if self.isEmpty():
self.__head = node
else:
cur = self.__head
while cur.next!=None:
cur = cur.next
cur.next= node
node.prev = cur
definsert(self, pos, value):"""insert a node at specific position"""if pos <=0:
self.shift(value)elif pos >(self.length()-1):
self.append(value)else:
node = Node(value)
cur = self.__head
count =0while count < pos:
cur = cur.next
count +=1
node.next= cur
node.prev = cur.prev
cur.prev.next= node
cur.prev = node
defremove(self, value):"""remove a node from list when a value first appears"""
cur = self.__head
# remove the first nodeif cur.value == value:if cur.nextisNone:
self.__head =Noneelse:
self.__head = cur.next
cur.next.prev =Nonereturn value
# elif self.length() == 0:elif self.__head isNone:returnelse:while cur.next!=None:if cur.value == value:
cur.next.prev = cur.prev
cur.prev.next= cur.nextreturn value
else:
cur = cur.nextif cur.value == value:
cur.prev.next=Nonereturn value
returndefexist(self, value):"""whether a node exists in list"""
cur = self.__head
while cur !=None:if cur.value == value:returnTrueelse:
cur = cur.nextreturnFalseif __name__ =="__main__":
dll = DoubleLinkedList()print(dll.exist(10))print(dll.length())print(dll.isEmpty())
dll.append(1)print(dll.length())print(dll.isEmpty())
dll.append(2)
dll.append(3)
dll.append(4)
dll.append(5)
dll.append(6)
dll.shift(8)
dll.insert(2,9)
dll.insert(-2,10)
dll.insert(100,11)
dll.travel()print(dll.length())print(dll.isEmpty())print(dll.exist(100))print(dll.exist(6))
dll.remove(6)
dll.remove(10)
dll.remove(11)print(dll.exist(6))
dll.travel()