代码改变世界

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

2019-05-01 11:09  Johnson_强生仔仔  阅读(222)  评论(0编辑  收藏  举报

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

        premNode = head  # find the node before mNode
     pre = head.next mNode = head.next curNode = mNode.next # reverse from mNode, just like in LeetCode 206 for _ in range(n - m): temp = curNode.next curNode.next = pre pre = curNode curNode = temp # combine the 前面一节和reverse的一节,以及最后一节 premNode.next = pre mNode.next = curNode return dummy.next