Leecode刷題143 重排鍊錶

2021-10-16 09:23:00 字數 1069 閱讀 8360

給定乙個單鏈表 l:l0→l1→…→ln-1→ln ,

將其重新排列後變為: l0→ln→l1→ln-1→l2→ln-2→…

你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。

示例 1:

給定鍊錶 1->2->3->4, 重新排列為 1->4->2->3.

示例 2:

給定鍊錶 1->2->3->4->5, 重新排列為 1->5->2->4->3.

class solution 

// reorderlisti(head);

reorderlistii(head);

}//方法二:三個步驟

//先找到鍊錶的中間結點,將中間節點之後的鍊錶進行反轉

//將鍊錶的前半部分和反轉後的部分進行合併

//時間複雜度o(n),空間複雜度o(1)

private void reorderlistii(listnode head)

private void merge(listnode left, listnode right)

}private listnode reverse(listnode head)

return prev;

}private listnode getmidnode(listnode head)

return slow;

}//方法一:使用list儲存

//先將鍊錶儲存到list中

//定義兩個指標,遍歷list,分別進行節點的交換

//時間複雜度o(n),空間複雜度o(n)

private void reorderlisti(listnode head)

int left = 0, right = list.size() - 1;

while (left < right)

list.get(right).next = list.get(left);

right--;

}//將鍊錶尾節點置為null

list.get(left).next = null;

}}

143 重排鍊錶

143.重排鍊錶 給定乙個單鏈表 l l0 l1 l n 1 ln 將其重新排列後變為 l0 l n l1 l n 1 l2 l n 2 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。示例 1 給定鍊錶 1 2 3 4,重新排列為 1 4 2 3.示例 2 給定鍊錶 1 2 3 4 ...

143 重排鍊錶

題解 時間複雜度 o n 空間複雜度 o n definition for singly linked list.struct listnode listnode int x val x next nullptr listnode int x,listnode next val x next nex...

143 重排鍊錶

題目 給定乙個單鏈表 l l0 l1 l n 1 ln 將其重新排列後變為 l0 l n l1 l n 1 l2 l n 2 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。示例 1 給定鍊錶 1 2 3 4,重新排列為 1 4 2 3.示例 2 給定鍊錶 1 2 3 4 5,重新排列...