zoukankan      html  css  js  c++  java
  • Python链表倒置的两种方法

    实现链表的翻转:

    思路一:

    def reverse(self):
        """
        翻转链表的第一种思路:依次改变结点的指向,将结点指向此结点的上一个结点,并使用pre来指向这个节点,相当于将原链表打断成了2条,在循环中依次从原链表加到新链表的头部,完成倒置
        为了保证在循环时能找到此结点的下一个结点,使用变量nex引用结点的原指向
        """
        if self.is_empty():
            return None
        # 当前节点
        cur = self.__head
        # 当前节点的上一个节点
        pre = None
        # 当前节点的下一个节点
        nex = cur.next
        while cur:
            # 当前节点存在
            cur.next = pre  # 将当前节点的指向变为上一个节点
            # 进行偏移
            pre = cur  # 这里注意,其实pre已经指向一个反向的链表
            # 这里使用nex而不是cur.next,是因为cur.next已发生改变
            cur = nex
            if cur:
                # 如果cur为None,则已遍历完毕原链表,跳出循环
                nex = nex.next
        self.__head = pre
        return self.travel()
    

    思路二:

    def reverse(self):
        if self.is_empty():
            return
        # 1.将链表用一个新的头部指向
        new_head = self.__head
        self.__head = None
        # 2.遍历新的链表,依次将每个节点插入原链表的头部
        while new_head:
            # 注意:这里需要先赋值给cur,保证当前结点不会丢失
            cur = new_head
            # 将当前结点从new_head中删除
            new_head = new_head.next
            # 将当前结点插入__head的头部
            cur.next = self.__head
            self.__head = cur
        return self.travel()
    
  • 相关阅读:
    单链表
    队列

    面向对象的数组与查找算法
    线性结构
    数据结构与算法概述
    webstorm 格式化代码快捷键
    Web规范小记录1:Web文件规范
    豆瓣 API报错 ( "code":104 问题 )
    舔狗日记二之心灵日记(H5版本)
  • 原文地址:https://www.cnblogs.com/zyyhxbs/p/11899925.html
Copyright © 2011-2022 走看看