python实现单链表与双向链表
# 首先看单链表
class Chain(): def __init__(self): self.first = None self.length = 0 def is_empty(self): """是否为空""" return self.first == None def add(self, val): """头部添加""" node = Node(val) temp = self.first node.next = temp self.first = node self.length += 1 def append(self, val): """尾部添加""" node = Node(val) if self.first: temp = self.first mid = None while temp: mid = temp temp = temp.next mid.next = node else: self.first = node self.length += 1 def __setitem__(self, item, val): """插入元素""" node = Node(val) temp, index = self.first, 0 if item == 0: node.next, self.first = self.first, node self.length += 1 else: while temp: if index+1 == item: node.next, temp.next = temp.next, node self.length += 1 break index += 1 temp = temp.next def __len__(self): """链表长度""" return self.length @property def len_2(self): """链表长度(时间复杂度O(n))""" if not self.first: return 0 else: temp = self.first length = 1 while temp.next: length += 1 temp = temp.next return length def pop(self): """删除尾部元素(有错误)""" temp = self.first mid = None while temp.next: mid, temp = temp, temp.next if mid: mid.next = None self.length -= 1 def __delitem__(self, item): """删除某一位置元素""" temp, index = self.first, 0 if item == 0: if self.first: self.first = self.first.next self.length -= 1 while temp: if index + 1 == item: temp.next = temp.next.next self.length -= 1 index += 1 temp = temp.next def bianli(self): """遍历链表""" temp = self.first while temp: print(temp.value) temp = temp.next
def reverse1(self):
"""反转链表"""
temp = self.first
prev = None
while temp:
temp_next = temp.next
temp.next = prev
prev = temp
temp = temp_next
self.first = prev
def reverse2(self):
"""反转链表"""
chain_list = []
temp = self.first
while temp:
chain_list.append(temp.value)
temp = temp.next
temp = self.first
while temp:
temp.val = chain_list.pop()
temp = temp.next
def __iter__(self): pass def __next__(self): pass class Node(): def __init__(self, val): self.value = val self.next = None
# 在来看双向链表 class Node(): def __init__(self, val): self.value = val self.prev = None self.next = None class Chain(): def __init__(self): self.first = None def is_empty(self): """是否为空""" return self.first == None def add(self, val): """头部添加""" node = Node(val) self.first.prev = node temp = self.first node.next = temp self.first = node def append(self, val): """尾部添加""" node = Node(val) temp = self.first if not temp: self.first = node else: while temp.next: temp = temp.next node.prev = temp temp.next = node def __delitem__(self, item): """删除元素""" temp, index = self.first, 0 while temp: if index == item: if temp.next: temp.next.prev, temp.prev.next = temp.prev, temp.next else: temp.prev.next = None index += 1 temp = temp.next def travel(self): temp = self.first while temp: print(temp.value) temp = temp.next