力扣(leetcode) 206. 反转链表 (新建链表法) (扭转next指针法)

题目在这:https://leetcode-cn.com/problems/reverse-linked-list/

法一:(新建链表法)

思路分析

直接将链表里的值放到数组里,然后翻转数组,然后再吧数组变成一个新链表即可。

在建立新链表的时候。只能一个节点一个节点造。所以要判断是不是到了数组最后一个数,是的话就不用再造新节点了。
完整代码

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        if not head or not head.next:
            return head
        res = []
        while head:
            res.append(head.val)
            head = head.next
        res = res[::-1]
        ans = ListNode() # 造新节点
        p = ans
        for i in range(len(res)):
            ans.val = res[i]
            if len(res) - 1 == i: # 判断是不是到了数组最后一个数
                break
            ans.next = ListNode()  # 造新节点
            ans = ans.next
        return p

法二: (原地翻转)

思路分析

原地翻转其实就是翻转所有节点的next的指针指向。

在这里插入图片描述

看图应该秒懂了吧。
我们只需要设置开始的指针:pre = None ; cur = head
然后俩指针无脑往后移就行,
当cur指向空时,
最后返回pre即可

完整代码

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        if not head or not head.next:
            return head
        pre = None
        cur = head
        while cur:
            temp = cur.next
            cur.next = pre
            pre = cur
            cur = temp
        return pre
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深度不学习!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值