1. 程式人生 > >LeetCode刷題_92. Reverse Linked List II

LeetCode刷題_92. Reverse Linked List II

原題連結:
https://leetcode.com/problems/reverse-linked-list-ii/description/

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

下面是第一遍寫的演算法,醜得一B,邊際條件太多,應該可以寫出更加簡介的程式碼,wr了好多次,終於A了,弱雞,其實這道題分別用兩個指標移動到m和n的位置,就轉化為

LeetCode206

class Solution:
    def reverseBetween(self, head, m, n):
        """
        :type head: ListNode
        :type m: int
        :type n: int
        :rtype: ListNode
        """
        #1->2->3->4->5->NULL
        #1->4->3->2->5->NULL
        #first用來儲存1的指標位置
#second用來儲存2的指標位置 #former與latter用來前後滑動,進行 first = head if m == n: return head if m == 1: first = head time = n-m-1 elif m == 2: first = head time = n-m else: for i in range
(m-2): first = first.next time = n-m second = first.next former = second current = second.next if current: latter = second.next.next else: latter = None if m == 1 and n == 2: second.next = first first.next = current return second for j in range (time): current.next = former former = current current = latter if current: latter = latter.next else: latter = None #if not (latter or current): #break if m == 1: second.next = first first.next = current return former else: first.next = former second.next = current return head