算法与数据结构——用Python实现简单单链表

算法与数据结构——用Python实现简单单链表

目前仅支持单链表的创建、长度查询、输出、任意位置的插入、指定元素的删除操作,后续会增加更多功能

  1 class Node(object):
  2     """单个节点"""
  3 
  4     def __init__(self, data):
  5         """数据域"""
  6         self.data = data
  7         """指针域"""
  8         self.next = None
  9 
 10 
 11 class SingleLinkList(object):
 12     """单链表"""
 13 
 14     def __init__(self, node=None):
 15         self.__head = node
 16 
 17     def is_empty(self):
 18         """查询链表是否为空"""
 19         return self.__head is None
 20 
 21     def length(self):
 22         """返回单链表的长度"""
 23         i = self.__head
 24         count = 0
 25         while i:
 26             count += 1
 27             i = i.next
 28         return count
 29 
 30     def travel(self):
 31         i = self.__head
 32         while i:
 33             print(i.data, end=' ')
 34             i = i.next
 35         print()
 36 
 37     def add(self, elem):
 38         """头插法"""
 39         node = Node(elem)
 40         node.next = self.__head
 41         self.__head = node
 42 
 43     def append(self, elem):
 44         """尾插法"""
 45         node = Node(elem)
 46         if self.is_empty():
 47             self.__head = node
 48         else:
 49             i = self.__head
 50             while i.next:
 51                 i = i.next
 52             i.next = node
 53 
 54     def insert(self, elem, pos):
 55         """在指定位置插入一个节点"""
 56         node = Node(elem)
 57         if pos == 0:
 58             self.add(elem)
 59         elif pos > (self.length() - 1):
 60             self.append(elem)
 61         elif pos < 0:
 62             print("非法的插入位置,将取插入位置的绝对值进行插入")
 63             pos = abs(pos)
 64             self.insert(elem, pos)
 65         else:
 66             count = 1
 67             i = self.__head
 68             while count:
 69                 if count == pos:
 70                     node.next = i.next.next
 71                     i.next = node
 72                     break
 73                 i = i.next
 74                 count += 1
 75 
 76     def remove(self, elem):
 77         """删除一个节点"""
 78         i = self.__head
 79         if self.is_empty():
 80             return
 81         count = 0
 82         if i.data == elem:
 83             self.__head = i.next
 84         else:
 85             while i.next:
 86                 if i.next.data == elem:
 87                     i.next = i.next.next
 88                     return count + 1, elem
 89                 i = i.next
 90                 count = count + 1
 91 
 92 
 93 if __name__ == '__main__':
 94     A = SingleLinkList()
 95     print(A.length())
 96     A.travel()
 97     A.append(20)
 98     A.append(30)
 99     A.append(40)
100     A.append(60)
101     A.append(70)
102     print(A.length())
103     A.travel()
104     A.add(10)
105     print(A.length())
106     A.travel()
107     A.insert(0, 0)
108     A.insert(50, 5)
109     A.insert(100, 20)
110     A.travel()
111     print(A.length())
112     A.remove(20)
113     print(A.length())
114     A.travel()

 

posted @ 2022-03-15 20:02  刘大炮不挂科  阅读(223)  评论(0)    收藏  举报