[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