链表的实现

复制代码
  1 class Link:
  2     class Node:
  3         def __init__(self, item, next=None):
  4             self.item = item
  5             self.next = next
  6 
  7     class LinkListIterator:
  8         def __init__(self, node):
  9             self.node = node
 10 
 11         def __next__(self):
 12             if self.node:
 13                 cur_node = self.node
 14                 self.node = self.node.next
 15                 return cur_node.item
 16             else:
 17                 raise StopIteration
 18 
 19         def __iter__(self):
 20             pass
 21 
 22     def __init__(self, iterable=None):
 23         self.head = None
 24         self.tail = None
 25         self.size = 0
 26         if iterable:
 27             self.extend(iterable)
 28 
 29     def ins_head(self, item):
 30         new_node = Link.Node(item, None)
 31         if self.size == 0:
 32             self.tail = new_node
 33         else:
 34             new_node.next = self.head
 35         self.head = new_node
 36         self.size += 1
 37 
 38     def ins_tail(self, item):
 39         new_node = Link.Node(item, None)
 40         if self.size == 0:
 41             self.head = new_node
 42         else:
 43             self.tail.next = new_node
 44         self.tail = new_node
 45         self.size += 1
 46 
 47     def print_link(self):
 48         for i in self:
 49             print(i, end=' ')
 50         print()
 51 
 52     def del_head(self):
 53         if self.size > 0:
 54             temp = self.head
 55             self.head = self.head.next
 56             self.size -= 1
 57             return temp
 58         else:
 59             raise IndexError
 60 
 61     def del_item(self, item):
 62         if self.size > 0:
 63             cur_node = self.head
 64             if self.size == 1:
 65                 if cur_node.item == item:
 66                     self.head = None
 67                     self.size -= 1
 68                     return cur_node.item
 69             else:
 70                 for i in range(self.size):
 71                     if cur_node.next and cur_node.next.item == item:
 72                         temp = cur_node.next
 73                         cur_node.next = cur_node.next.next
 74                         self.size -= 1
 75                         return temp.item
 76                     cur_node = cur_node.next
 77                 else:
 78                     print('找不到要删除的元素')
 79                     return None
 80         else:
 81             raise IndexError
 82 
 83     def find(self, item):
 84         for i in self:
 85             if i == item:
 86                 return True
 87         else:
 88             return False
 89 
 90     def extend(self, iterable):
 91         for i in iterable:
 92             self.ins_tail(i)
 93 
 94     def __iter__(self):
 95         return self.LinkListIterator(self.head)
 96 
 97     def __str__(self):
 98         return '<<' + ','.join(map(str, self)) + '>>'
 99 
100     __repr__ = __str__
101 
102 
103 if __name__ == '__main__':
104     link = Link(['a', 'b', 'c'])
105     link.ins_head(1)
106     link.ins_head(2)
107     link.ins_head(3)
108     link.print_link()
109     link.ins_tail(4)
110     link.ins_tail(5)
111     link.ins_tail(6)
112     link.print_link()
113     print('-------------')
114     print('--', link.del_item(5))
115     print(link)
复制代码

 

posted @   Avery_rainys  阅读(25)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示