链表逆序---python
class ListNode: Value = '' # 节点要储存的值,因为Python是弱类型,因此无需传入泛型 Next = None # 下一个节点,初始化时为空值 def __init__(self, value): # 初始化,默认初始化节点时,必须给定节点要储存的值(Value)。 self.Value = value self.Next = None def set_next(self, next): # 指定下一个节点(Next)。 self.Next = next def get_value(self): # 获取当前节点所存储的值 return self.Value def get_next(self): # 获取下一个节点 return self.Next class List: Head = None # 头结点 def __init__(self): # 初始化链表函数 self.Head = ListNode(0) # 初始化链表时即初始化头结点,其内的值为0 def add(self, value): # 添加节点函数 node = self.Head node.Value += 1 # 头结点中存储的长度+1 while node.Next is not None: node = node.Next node.Next = ListNode(value) # 初始化新节点,并添加到末尾 def print_list(self): # 打印列表函数 node = self.Head print('The List Length is ', end='') print(node.get_value(), end=' :[') # 打印一下列表总长度 if node.Next is None: # 如果是空链表直接结束 print("]") return node = node.Next # 从头结点下一个节点开始操作 while node.Next is not None: print(node.get_value(), end=' ,') # 打印节点值 node = node.Next # 下一节点 print(node.get_value(), end=']\n') # 打印最后一个节点并换行 def reverse(self): # 将链表逆序函数 print("逆序操作!") head = self.Head # 头结点先拿出来 if head.Next is None: return # 如果只有头结点,便直接返回 node = head.Next # 从头结点下一个节点开始操作 temp = None # 记录下一节点的临时值 pre = None # 记录上一节点的临时值 while node.Next is not None: # 当下一节点不为空的时候循环 temp = node.Next # 先记住本节点的下一节点 node.Next = pre # 让本节点指向上一节点【核心操作】 pre = node # 将上一节点临时指针后移 node = temp # 将本节点后移 node.Next = pre # 当循环结束之后,最后一个节点指向前一节点,完成链表逆序 head.Next = node # 将头结点指向新的链表起始节点 if __name__ == '__main__': # 主函数开始 my_list = List() # 初始化链表 for i in range(0, 10): my_list.add(i) # 增加节点值 my_list.print_list() # 打印一下 my_list.reverse() # 逆序操作 my_list.print_list() # 再打印一下看看