class Link:
def __init__(self):
self.n = 0
self.fist_node = Node()
super(Link, self).__init__()
def isEmply(self):
return self.n == 0
def clear(self):
self.n = 0
self.fist_node = Node()
def add(self, node):
item = self.fist_node
while item.next_addr:
item = item.next_addr
item.next_addr = node
self.n += 1
def addx(self, i, node):
if i > self.n:
return -1
temp = self.fist_node
for x in range(1, self.n + 1):
if x == i:
break
temp = temp.next_addr
node.next_addr = temp.next_addr
temp.next_addr = node
def get(self, i):
if self.n == 0:
return -1
temp = self.fist_node.next_addr
for x in range(1, self.n + 1):
if x == i:
break
temp = temp.next_addr
return temp.value
def delete(self, i):
if i > self.n or i <= 0:
return -1
temp = self.fist_node
for x in range(1, self.n + 1):
if x == i:
break
temp = temp.next_addr
temp.next_addr = temp.next_addr.next_addr
self.n -= 1
def reverse(self):
Link.node_reverse(self, self.fist_node.next_addr)
def node_reverse(self, node):
if node.next_addr:
item = Link.node_reverse(self, node.next_addr)
item.next_addr = node
node.next_addr = None
return node
else:
self.fist_node.next_addr = node
return node
class Node:
def __init__(self, pre=None, value=None, next_addr=None):
self._pre = pre
self._value = value
self._next_addr = next_addr
@property
def pre(self):
return self._pre
@pre.setter
def pre(self, addr):
self._pre = addr
@property
def next_addr(self):
return self._next_addr
@next_addr.setter
def next_addr(self, addr):
self._next_addr = addr
@property
def value(self):
return self._value
@value.setter
def value(self, value):
self._value = value
if __name__ == '__main__':
link = Link()
node = Node(value='11')
node1 = Node(value='12')
node2 = Node(value='13')
node3 = Node(value='13')
link.add(node)
link.add(node1)
link.add(node2)
link.add(node3)
print(link.get(1))
print(link.get(2))
print(link.get(3))
print(link.get(4))
link.reverse()
print(link.get(1))
print(link.get(2))
print(link.get(3))
print(link.get(4))
python实现单链表反转
最新推荐文章于 2024-03-18 21:21:22 发布