NC21 連結串列內指定區間反轉
阿新 • • 發佈:2021-11-20
描述
將一個節點數為 size 連結串列 m位置到n 位置之間的區間反轉,要求時間複雜度O(n)O(n),空間複雜度O(1)O(1)。例如:
給出的連結串列為1\to 2 \to 3 \to 4 \to 5 \to NULL1→2→3→4→5→NULL,m=2,n=4m=2,n=4,
返回1\to 4\to 3\to 2\to 5\to NULL1→4→3→2→5→NULL.
資料範圍:連結串列長度0 < size \le 10000<size≤1000,0 < m \le n \le size0<m≤n≤size,連結串列中每個節點的值滿足|val| \le 1000∣val∣≤1000 要求:時間複雜度O(n)O(n),空間複雜度O(n)O(n)
示例1
輸入:{1,2,3,4,5},2,4返回值:
{1,4,3,2,5}
示例2
輸入:{5},1,1返回值:
{5}
# class ListNode: # def __init__(self, x): # self.val = x # self.next = None # # 程式碼中的類名、方法名、引數名已經指定,請勿修改,直接返回方法規定的值即可 # # # @param head ListNode類 # @param m int整型處理演算法通用的輔助的code,如讀取txt檔案,讀取xml檔案,將xml檔案轉換成txt檔案,讀取json檔案等# @param n int整型 # @return ListNode類 # class Solution: def reverseBetween(self , head: ListNode, m: int, n: int) -> ListNode: # write code here p=head N=0 L_lst=[] #利用佇列計數 while p: N+=1 L_lst.append(p) p=p.nextif N<=1:return head if m==n:return head L1=L_lst[:m-1] if m>1 else None L2=L_lst[m-1:n] L3=L_lst[n:] if N>n else None for i in range(len(L2)-1): node=L2[-i-1] node.next=L2[-i-2] if L3 is not None: L2[0].next=L3[0] else: L2[0].next=None if L1 is not None: L1[-1].next=L2[-1] return L1[0] else: return L2[-1]