25.反转链表(简单)

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        '''递归法'''
        if head == None or head.next == None:
            return head
        new_head = self.reverseList(head.next)  # 这一步变为 1>2<-3<-4<-5
        head.next.next = head   # 这一步将 1>2 变为 1<-2
        head.next = None # None<-1<-2<-3<-4<-5
        return new_head

        # '''迭代法:
        # 准备三个指针,分别指向前一个节点,当前节点和后一个节点
        # 循环一次就把当前节点的next域指向前一个节点,然后将三个指针都分别前移一个位置'''
        # if head == None or head.next == None:
        #     return head
        # pre = head
        # cur = pre.next
        # post = cur.next
        # pre.next = None # 将第一个节点的next置None
        # while cur != None:
        #     cur.next = pre
        #     pre = cur
        #     cur = post
        #     if post != None:
        #         post = post.next
        # return pre

递归法解题思路:

链表是经典的递归定义的数据结构,链表相关的题目常常考察递归,翻转链表是其中的经典题目。
在思考递归问题的时候,我们要从上到下思考:

子问题是什么
base case是什么
在当前层要干什么
对翻转链表来说,以1->2->3->4->5为例:
子问题是:除去current node,翻转剩余链表,即除去1, reverseList(2->3->4->5),递归得到的解是 5->4->3->2
base case:当前节点为空,返回空,当前节点的next为空(只剩余一个节点),返回该节点
在当前层要干什么:翻转链表,即把1->2变为2->1.
最后return的是结果链表的头,也就是递归解的头。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值