| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
 本帖最后由 歌者文明清理员 于 2023-2-10 17:37 编辑  
 
新建一个空白.py文件,命名为singlelink.py 
上次学习了节点,并保存为了node.py 
将singlelink和node保存在同一目录下 
今天的程序需要使用node.py的Node类,所以 
 
然后,说明一下SingleLink实例的属性和方法 
- 属性   head 头节点,说白了就是列表的abdcys7[0](名字乱起的) 
- 属性   length 长度 
- 方法   add(data) 添加元素data到开头 
       网上有些不讲代码的思路,很难懂,所以我讲解一下 
-     def add(self, data):
 
 -         # 在node.py的示例中,节点可以说是一环套一环,node1.next.next是node1往后两个元素
 
 -         # 所以我们也要“包围”self.head,代替第一个元素,用一个新节点替换掉self.head
 
 -         new = Node(data, next=self.head)
 
 -         self.head = new  # 原来的self.head并没有被“抛弃”,它成为了new.next
 
 
  复制代码 
- 方法   append(data) 在末尾追加元素 
-     def append(self, data):
 
 -         if self.length:  # 如果是整数作为条件,0为false,其他True
 
 -             # length - 1是最后一个元素的索引
 
 -             # 包围新节点
 
 -             self.get(self.length - 1).next = Node(data)
 
 -         else:
 
 -             self.head = Node(data)
 
 -             # 完全可以写成Node(data, next=self.head),可length为0的时候head是None,所以next=None,也是默认值,所以没有这个必要
 
 
  复制代码 
- 方法    get(index)   获取索引index 
打了这么多,先看看目前程序变啥样了吧 
- from node import Node
 
 - # -*- coding: utf-8 -*-
 
 - class SingleLink:
 
 -      def __init__(self):
 
 -         self.head = None
 
 -         self.length = 0
 
  
-      def __len__(self):  # len(instance)的时候调用的函数
 
 -         return self.length
 
  
-      def __repr__(self):
 
 -           msg = ''
 
 -           values = list(self)
 
 -           return str(values)
 
  
-      def __iter__(self):  # 当试图将链表改变为可迭代对象
 
 -           if self.length:
 
 -               cur = self.head
 
 -               yield cur.data
 
 -               while cur.next != None:
 
 -                  cur = cur.next
 
 -                  yield cur.data
 
  
-      def get(self, index):
 
 -          return list(self)[index]
 
  
-      def __getitem__(self, key):
 
 -          return self.get(key)
 
  
-      def add(self, data):
 
 -         new = Node(data, next=self.head)
 
 -         self.head = new
 
 -         self.length += 1
 
  
-      def append(self, data):
 
 -         if self.length:
 
 -             self.get(self.length - 1).next = Node(data)
 
 -         else:
 
 -             self.head = Node(data)
 
 -         self.length += 1
 
  
- if __name__ == '__main__':
 
 -     sl = SingleLink()
 
 -     sl.append(9)
 
 -     print(list(sl))
 
  
  复制代码 
注:空格可能没敲对,用ipad的 
还有,重复的length和__len__、get和getitem是为了给用户(你们)更多的选择,想怎么样怎么样 
接受建议改过之后都2400多字节了,所以这只是(1)而已 |   
 
 
 
 |