03_single_link_list
// An highlighted block
# coding:utf-8
class Node(object):
'''结点'''
def __init__(self, elem):
'''单链表'''
self.elem = elem
self.next = None
class SingleLinkList(object):
'''单链表'''
def __init__(self, node=None):
self.__head = node
def is_empty(self):
'''链表是否为空'''
return self.__head == None
def length(self):
'''链表长度'''
# cur游标,用来移动遍历结点
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.elem, end=" ")
cur = cur.next
print("")
def add(self, item):
'''链表头部添加元素,头插法'''
node = Node(item)
node.next = self.__head
self.__head = node
def append(self, item):
'''链表尾部添加元素,尾插法'''
node = Node(item)
if self.is_empty():
self.__head = node
else:
cur = self.__head
while cur.next != None:
cur =cur.next
cur.next = node
# pass
def insert(self,pos,item):
'''指定位置添加元素
:param pos 从0开始'''
if pos <= 0:
self.add(item)
elif pos > (self.length()-1):
self.append(item)
else:
pre = self.__head
count = 0
while count < (pos-1):
count += 1
pre = pre.next
#当循环退出后,pre指向pos-1
node = Node(item)
node.next = pre.next
pre.next = node
def search(self,item):
'''查找结点是否存在'''
cur = self.__head
while cur != None:
if cur.elem ==item:
return True
else:
cur=cur.next
return False
def remove(self,item):
'''删除节点'''
cur = self.__head
pre = None
while cur != None:
if cur.elem == item:
#先判断此结点是否是头结点
#头结点
if cur == self.__head:
self.__head = cur.next
else:
pre.next = cur.next
break
else:
pre =cur
cur =cur.next
if __name__ =="__main__":
ll = SingleLinkList()
print(ll.length())
print(ll.is_empty())
ll.append(2)
ll.add(8)
ll.add(2)
ll.add(3)
ll.append(4)
# ll.insert(-1,9)
ll.insert(2,100)
ll.travel()
ll.remove(8)
ll.travel()
04_double_link_list
// An highlighted block
# coding:utf-8
class Node(object):
'''结点'''
def __init__(self,item):
self.elem = item
self.next = None
self.prev = None
class DoubleLinkList(object):
'''单链表'''
def __init__(self, node=None):
self.__head = None
def is_empty(self):
'''链表是否为空'''
return self.__head is None
def length(self):
'''链表长度'''
# cur游标,用来移动遍历结点
cur = self.__head
#count记录数量
count = 0
while cur != None:
count += 1
cur = cur.next
return count
def travel(self):
'''遍历整个链表'''
cur = self.__head
while cur != None:
print(cur.elem, end=" ")
cur = cur.next
print("")
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)
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.next = node
cur.prev = node
def search(self,item):
'''查找结点是否存在'''
cur = self.__head
while cur != None:
if cur.elem ==item:
return True
else:
cur=cur.next
return False
def remove(self,item):
'''删除节点'''
cur = self._head
pre = None
while cur != None:
if cur.elem == item:
#先判断此结点是否是头结点
#头结点
if cur == self._head:
self._head = cur.next
if cur.next:
#判断链表是否只有一个结点
cur.next.prev = None
else:
cur.pre.next = cur.next
if cur.next:
cur.next.prev = cur.prev
else:
pre =cur
cur =cur.next
if __name__ =="__main__":
dll = DoubleLinkList()
dll.append(1)
print(dll.is_empty())
print(dll.length())
# dll.append(2)
dll.add(8)
dll.append(3)
dll.append(4)
dll.append(5)
dll.append(6)
#
dll.insert(-1,9) #9 8 1 23456
# dll.insert(2,100) #9 8 1 100 2 3456
# dll.insert(10,200) # 9 8 1 100 23456 200
dll.travel()
05_single_cycle_link_list
// An highlighted block
# coding:utf-8
class Node(object):
'''结点'''
def __init__(self,elem):
self.elem = elem
self.next = None
class SingleCycleLinkList(object):
'''单向循环链表'''
def __init__(self,node=None):
self.__head = node
if node:
node.next = node
def is_empty(self):
'''链表是否为空'''
return self.__head == None
def length(self):
'''链表长度'''
if self.is_empty():
return 0
#cur游标,用来移动遍历结点
cur = self.__head
#count记录数量
count = 1
while cur.next != self.__head:
count += 1
cur = cur.next
return count
def travel(self):
'''遍历整个链表'''
if self.is_empty():
return
cur = self.__head
while cur.next != self.__head:
print(cur.elem,end=" ")
cur = cur.next
#退出循环,cur指向尾结点,但尾结点元素未打印
print(cur.elem)
def add(self,item):
'''链表头部添加元素,头插法'''
node = Node(item)
if self.is_empty():
self.__head = node
node.next = node
else:
cur =self.__head
while cur.next != self.__head:
cur = cur.next
#退出循环,cur指向尾结点
node.next = self.__head
self.__head = node
#cur.next = node
cur.next = self.__head
def append(self,item):
'''链表尾部添加元素,尾插入'''
node = Node(item)
if self.is_empty():
self.__head = node
node.next = node
else:
cur = self.__head
while cur.next != self.__head:
cur = cur.next
# cur.next = node
node.next = self.__head
cur.next = node
def insert(self,pos,item):
'''指定位置添加元素
:param pos从0开始
'''
if pos <= 0:
self.add(item)
elif pos > (self.length()-1):
self.append(item)
else:
pre =self.__head
count = 0
while count < (pos-1):
count +=1
pre = pre.next
# 当循环退出后,pre指向pos-1位置
node = Node(item)
node.next = pre.next
pre.next = node
def search(self,item):
'''查找结点是否存在'''
if self.is_empty():
return False
cur = self.__head
while cur.next != self.__head:
if cur.elem == item:
return True
else:
cur =cur.next
return False
def remove(self,item):
'''删除结点'''
if self.is_empty():
return
cur = self.__head
pre = None
while cur.next != self.__head:
if cur.elem == item:
#先判断此结点是否是头结点
if cur == self.__head:
#头结点的情况
#找尾结点
rear = self.__head
while rear.next != self.__head:
rear = rear.next
else:
#中间结点
pre.next = cur.next
return
else:
pre = cur
cur = cur.next
#退出循环,cur指向尾结点
if cur.elem == item:
if cur == self.__head:
self.__head = None
else:
pre.next =cur.next
if __name__ =="__main__":
ll = SingleCycleLinkList()
print(ll.length())
print(ll.is_empty())
ll.append(1)
print(ll.length())
print(ll.is_empty())
ll.append(2)
ll.add(8)
ll.append(3)
ll.append(4)
ll.append(5)
ll.append(6)
ll.insert(-1,9)
ll.travel()
ll.insert(3, 100)
ll.travel()
ll.insert(10, 200)
ll.travel()
ll.remove(100)
ll.travel()
ll.remove(9)
ll.travel()
ll.remove(200)
ll.travel()