zoukankan      html  css  js  c++  java
  • 206. 反转链表

    问题描述

    反转一个单链表。

    示例:

    输入: 1->2->3->4->5->NULL
    输出: 5->4->3->2->1->NULL
    

    进阶:
    你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

    解决方案

    1.迭代法

    def reverse_loop(head):
        """
        循坏迭代
        :param head:
        :return:
        """
        if not head or not head.next:
            return head
        pre = None
        while head:
            next = head.next  	# 缓存当前节点的向后指针,待下次迭代用
            head.next = pre  	# 这一步是反转的关键,相当于把当前的向前指针作为当前节点的向后指针
            pre = head  		# 作为下次迭代时的(当前节点的)向前指针
            head = next  		# 作为下次迭代时的(当前)节点
        return pre  			# 返回头指针,头指针就是迭代到最后一次时的head变量(赋值给了pre)
    

    2.递归法

    def reverse_recursion(head):
        """
        递归法
        基准条件是将前置节点的下一位替换成自己,并将自己的下一个节点置空
        :param head:
        :return:
        """
        if not head or not head.next:                   # 处理边界情况
            return head
    
        new_head = reverse_recursion(head.next)
    
        head.next.next = head
        head.next = None
        return new_head
    
  • 相关阅读:
    借了个屏幕来用
    生命开始的地方
    看了STLPort的安装方法,晕了
    程序员必备的10大健康装备!
    《代码整洁之道》读书笔记
    Mockito使用
    学习Emacs的理由
    shell 脚本编程的10 个最佳实践
    MongoDB入门
    用Orgmode实践《奇特的一生》
  • 原文地址:https://www.cnblogs.com/huang-yc/p/10634029.html
Copyright © 2011-2022 走看看