• LeetCode206链表翻转


    第一种方法:双指针法

    # coding:utf-8
    """
    Name : NO206.py
    Author  : qlb
    Contect : 17801044486@163.com
    Time    : 2021/2/3 22:11
    Desc:
    """
    # Definition for singly-linked list.
    # 链表反转
    # 解题思路:不断地将当前节点指向当前节点的前一个节点,完成翻转。初始,当前节点为head节点,head的前一个节点为none,不断向后移动,更新当前节点
    # 同时也更新当前节点的前一个节点 直到当前节点为none 返回当前节点的前一个节点 此时的前一个节点就是新的头节点
    class ListNode:
        def __init__(self, val=0, next=None):
            self.val = val
            self.next = next
    class Solution:
        def reverseList(self, head: ListNode) -> ListNode:
            curNode = head
            preNode = None
            while curNode is not None:
                tmpNode = curNode.next #由于当前节点的指向要发生变化 所以提前将当前节点指向的下一个节点保存起来
                curNode.next = preNode # 将当前节点的指向更新为当前节点的前一个节点
                preNode = curNode # 更新 preNode 向后移动 上一轮的当前节点变为前一个节点
                curNode =tmpNode # 更新 curNode  向后移动 上一轮的当前节点指向的下一个节点变为了当前节点
            return preNode

    第二种方法:递归调用

    #递归调用解题思路
    #不断调用reverse1方法将当前节点指向当前节点的前一个节点 直到当前节点为None  返回pre
    # 当前节点初始为head 当前节点的前一个节点初始为None
    class Solution1:
        def reverseList(self, head: ListNode) -> ListNode:
            curNode = head
            preNode = None
            return self.reverse1(preNode,curNode)
        def reverse1(self,pre,cur):
            if cur is None:
                return pre
            tmpNode = cur.next
            cur.next = pre
            newPre = cur
            newCur = tmpNode
            return self.reverse1(newPre,newCur)
  • 相关阅读:
    join命令
    参与者模式
    字符串中的第一个唯一字符
    Git与SVN对比
    惰性模式
    .NET Conf 2020
    使用Github部署Azure应用服务
    Azure Terraform(一)入门简介
    打日志还能打出个线上Bug_ 太难了。。。
    让API并行调用变得如丝般顺滑的绝招
  • 原文地址:https://www.cnblogs.com/cnugis/p/14370285.html
Copyright © 2020-2023  润新知