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)
原文地址:https://www.cnblogs.com/cnugis/p/14370285.html