代码是别人写的,我只是对它的方法做一个总结,告诉你双循环链表具体应该如何使用。 class Node: def __init__(self, data=None): self.data = data self.pre = None self.next = None def __repr__(self): return str(self.data) class LinkList: def __init__(self): self.head = Node() self.tail = Node() self.head.next = self.tail self.tail.pre = self.head def __len__(self): length = 0 node = self.head while node.next != self.tail: length += 1 node = node.next return length def __repr__(self): return str(len(self)) def append(self, data): node = Node(data) pre_node = self.tail.pre pre_node.next = node node.pre = pre_node self.tail.pre = node node.next = self.tail return node def get(self, index): """ 获取第index个值,若index>0正向获取else 反向获取 :param index: :return: """ length = len(self) index = index if index >= 0 else length +index if index >= length or index < 0: return None node = self.head.next while index: node = node.next index -= 1 return node def insert(self, index, data): """ 因为加了头尾节点所以获取节点node就一定存在node.next 和 node.pre :param index: :param data: :return: """ length = len(self) if abs(index + 1) > length: return False index = index if index >= 0 else index +1+length next_node = self.get(index) if next_node: node = Node(data) pre_node = next_node.pre pre_node.next = node node.pre = pre_node node.next = next_node next_node.pre = node return node def delete(self, index): node = self.get(index) if node: node.pre.next = node.next node.next.pre = node.pre return True return False def display_linklist(linklist): i = 0 while i < len(linklist): data = linklist.get(i) i += 1 def get_data_linklist(linklist): datas = [] i = 0 while i < len(linklist): node = linklist.get(i) datas.append(node.data[0]) i += 1 return datas def get_linklist_data(linklist): '''获取链表所有的数据''' data_list = [] i = 0 while i < len(linklist): data = linklist.get(i).data[0] data_list.append(data) i += 1 return data_list if __name__ == '__main__': ls = LinkList() ls.append('北') ls.append('上') ls.append('广') ls.append('深') ls.append('伤') ls.append('不') ls.append('起') print(ls.__len__()) #获取链表的个数 print(ls.get_linklist_data()) #获取整个链表 print(ls.append('啊')) #追加一个啊 print(ls.get_linklist_data()) ls.delete(0) #删除链表中第0个元素 print(ls.get_linklist_data()) ls.insert(0,['内向即失败']) #在第0个的地方插入一个元素 print(ls.get_linklist_data()) ls.append(['为何我输的这么惨']) #在最后一个的地方插入一个元素 print(ls.get_data_linklist()) print(ls.get(0).data) #从链表中获取第0个元素 print(ls.get_data_linklist()) #此时链表不会发生任何变化 print(ls.get(-1)) #此时获取链表中最后一个元素 #-------------------------------------------------------------# ls.get(-1).data[0]='为何要这样对我' #改变获取到的最后一个元素 print(ls.get_linklist_data())
res:
7
['北', '上', '广', '深', '伤', '不', '起']
啊
['北', '上', '广', '深', '伤', '不', '起', '啊']
['上', '广', '深', '伤', '不', '起', '啊']
['内向即失败', '上', '广', '深', '伤', '不', '起', '啊']
['内向即失败', '上', '广', '深', '伤', '不', '起', '啊', '为何我输的这么惨']
['内向即失败']
['内向即失败', '上', '广', '深', '伤', '不', '起', '啊', '为何我输的这么惨']
['为何我输的这么惨']
['内向即失败', '上', '广', '深', '伤', '不', '起', '啊', '为何要这样对我']