牛客網刷題 重排鍊錶

2021-10-22 01:18:23 字數 1366 閱讀 3643

將給定的單鏈表 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 是一場極其毒瘤的比賽。為了在這次...