[LeetCode] 92. Reverse Linked List II_Medium tag: Linked List

Reverse a linked list from position m to n. Do it in one-pass.

Note: 1 ≤ m ≤ n ≤ length of list.

Example:

Input: 1->2->3->4->5->NULL, m = 2, n = 4
Output: 1->4->3->2->5->NULL

这个题目是在[LeetCode] 206. Reverse Linked List_Easy tag: Linked List做的follow up/提升,也就是要找到相应的点,然后再做m - n 次reverse,最后将linked list排好就可以了。这里我还是用了temp,便于logic上面的理解。也可以利用python的语句特点进行优化。

Code

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution:
    def reverseList2(self, head, m, n):
        dummy = ListNode(0)
        dummy.next = head
        head = dummy
        for _ in range(m - 1):
            head = head.next

        pre = head  # find the node before mNode
        mNode = head.next
        curNode = mNode.next

        # reverse from mNode, just like in LeetCode 206
        for _ in range(n - m):
            temp = curNode.next
            curNode.next = mNode
            mNode = curNode
            curNode = temp

        # combine the 前面一节和reverse的一节,以及最后一节
        temp = pre.next
        pre.next = mNode
        temp.next = curNode
        return dummy.next

 

转载于:https://www.cnblogs.com/Johnsonxiong/p/10799389.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值