1 #-*- coding=utf-8 -*-
2 #software: 算法学习
3 #datetime:2020/4/8 11:13 上午
4
5 classNode(object):6
7 def __init__(self, data=None, next=None):8 self._value =data9 self._next =next10
11 defget_value(self):12 returnself._value13
14 defget_next(self):15 returnself._next16
17 defset_value(self, new_data):18 self._value =new_data19
20 defset_next(self, new_next):21 self._next =new_next22
23
24 classLinkList(object):25
26 def __init__(self):27 self._head =Node()28 self._tail =self._head29 self._length =030
31 defhead(self):32 """
33 链表的第一个元素(除去头节点)34 :return:35 """
36 ifself._head.get_next():37 returnself._head.get_next()38 else:39 returnNode()40
41 deftail(self):42 """
43 链表的最后一个元素44 :return:45 """
46 returnself._tail47
48 defis_empty(self):49 """
50 判断链表是否为空51 :return:52 """
53 return self._length ==054
55 defsize(self):56 """
57 链表的大小58 :return:59 """
60 returnself._length61
62 defadd(self, value):63 """
64 从头部插入节点65 :param value:66 :return:67 """
68 new_node =Node(value)69 new_node.set_next(self._head.get_next())70 self._head.set_next(new_node)71 self._length += 1
72
73 defappend(self, value):74 """
75 从尾部追加节点76 :param value:77 :return:78 """
79 new_node =Node(value)80 ifself.is_empty():81 self._head.set_next(new_node)82 else:83 current =self._head84 whilecurrent.get_next():85 current =current.get_next()86 current.set_next(new_node)87 self._tail =new_node88 self._length += 1
89
90 defsearch(self, value):91 """
92 查找数据,返回-1或者节点索引93 :param value:94 :return:95 """
96 current =self._head.get_next()97 count =098 whilecurrent.get_next():99 if current.get_value() ==value:100 returncount101 current =current.get_next()102 count += 1
103 return -1
104
105 defremove(self, value):106 """
107 删除 返回该数据或者-1108 :param value:109 :return:110 """
111 current =self._head112 pre =None113 whilecurrent.get_next():114 if current.get_value() ==value:115 if notpre:116 self._head =current.get_next()117 else:118 pre.set_next(current.get_next())119 self._length -= 1
120 returncurrent.get_value()121 pre =current122 current =current.get_next()123 else:124 return -1
125
126
127 definsert(self, index, value):128 """
129 插入数据节点130 :param index:131 :param value:132 :return:133 """
134 if index <= 1:135 self.add(value)136 elif index >self.size():137 self.append(value)138 else:139 new_node =Node(value)140 count =0141 current =self._head142 pre =None143 while count