將給定的單鏈表 l: l0→l1→…→l→ln
重新排序為:l0→ln →l1→l→l2→l→…l
要求使用原地演算法,不能改變節點內部的值,需要對實際的節點進行交換。
輸入
輸出線性表:因為鍊錶沒有下表,我們可以現將鍊錶遍歷一遍,儲存到線性表中,然後再重排序
鍊錶中點+鍊錶逆序+合併鍊錶:先查詢鍊錶的中點,將鍊錶分開,後半截鍊錶逆序,然後合併兩個兩表,即可重排序
// 思路1:線性表
public
class
solution
for(
int i =
0; i < temp.
size()
/2; i++)}
}}
時間複雜度分析:o(n):遍歷鍊錶
空間複雜度分析:o(n):使用了大小為n的線性表
// 思路2:鍊錶中點+鍊錶逆序+合併鍊錶
public
class
solution
// 獲取中點
listnode middle =
getmiddle
(head)
;// 分離
listnode next = middle.next;
middle.next = null;
// 反轉
listnode revert =
revert
(next)
;// 合併
merge
(head, revert);}
// 查詢中點
public listnode getmiddle
(listnode head)
return slow;
}// 採用頭插法
public listnode revert
(listnode head)
return pre;
}public listnode merge
(listnode l1, listnode l2)
return l1;
}}
時間複雜度分析:o(n):遍歷鍊錶
空間複雜度分析:小夥伴如果想測試的話,可以直接到牛客網這個鏈結做測試o(1):沒有使用額外的空間
重排鍊錶-牛客網
牛客網刷題之複雜鍊錶
題目描述 現在有乙個這樣的鍊錶 鍊錶的每乙個節點都附加了乙個隨機指標,隨機指標可能指向鍊錶中的任意乙個節點或者指向空。請對這個鍊錶進行深拷貝。題目分析 public class solution 當前節點指向複雜鍊錶的頭結點 randomlistnode curnode head 賦值原始鍊錶,並將...
牛客網刷題
時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 立華奏在學習初中數學的時候遇到了這樣一道大水題 設箱子內有 n 個球,其中給 m 個球打上標記,設一次摸球摸到每乙個球的概率均等,求一次摸球摸到打標記的球的概率 e...
牛客網刷題
時間限制 c c 2秒,其他語言4秒 空間限制 c c 524288k,其他語言1048576k 64bit io format lld 立華奏是乙個剛剛開始學習 oi 的萌新。最近,實力強大的 qingyu 當選了 iods 9102 的出題人。眾所周知,iods 是一場極其毒瘤的比賽。為了在這次...