反转链表

一、题目描述

反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。

说明:
1 ≤ m ≤ n ≤ 链表长度。

示例:

输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-linked-list-ii。

二、思路和代码

建立3个列表s1、s2和s3,s1和s3存储不需要变换的结点,s2存储需要变换的结点,最后将3个列表存储的值合并到一个链表里面。

class Solution:
    def reverseBetween(self, head: ListNode, m: int, n: int) -> ListNode:
        if not head: return None
        s1 = [] #存储m之前的数
        s2 = [] #存储m-n之间的数
        s3 = [] #存储n之后的数
        for i in range(m-1):
            n1 = head.val
            s1.append(n1)
            head = head.next
        for j in range(m,n+1):
            n2 = head.val
            s2.append(n2)
            head = head.next
        while head:
            n3 = head.val
            s3.append(n3)
            head = head.next
        l1 = ListNode(0)
        move = l1
        s1_len = len(s1)
        s2_len = len(s2)
        s3_len = len(s3)
        for i in range(s1_len):
            move.next = ListNode(s1[i])
            move = move.next
        for j in range(s2_len-1,-1,-1): #利用for的规则反转
            move.next = ListNode(s2[j])
            move = move.next
        for k in range(s3_len):
            move.next = ListNode(s3[k])
            move = move.next 
        return l1.next

总结

今天看了大佬们的代码,感觉差距挺大的,不过想想自己自学python差不多刚好2个月,就释怀了。(请记住这句话,以后我会经常用这个借口的。)
接下来说说大佬们给我眼前一亮的点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值