LeetCode刷題_92. Reverse Linked List II
阿新 • • 發佈:2018-12-19
原題連結:
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