劍指offer刷題記錄 分解讓複雜問題簡單

2021-10-03 07:00:17 字數 1351 閱讀 7505

輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點),返回結果為複製後複雜鍊錶的head。(注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空)

由於該鍊錶不是普通的鍊錶,複製過程中還要對特殊指標進行複製,所以我們在原煉表上操作要分多次。剛開始的時候首先將鍊錶上的節點值進行複製,並放置在對應結點之後。

然後再度遍歷,這時候對random指標賦值,複製節點的random指標正好和它的前乙個節點的random指標指向的位置一樣。

最後對鍊錶進行拆分,鍊錶的偶數字置連線起來即為我們複製的鍊錶。

/*

struct randomlistnode

};*/

class

solution

curnode=phead;

while

(curnode)

curnode=node-

>next;

} randomlistnode* clonehead = phead-

>next;

curnode = phead;

randomlistnode* tmp;

while

(curnode-

>next)

return clonehead;}}

;

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。

/*

struct treenode

};*/

class

solutionif(

!s.empty()

)else

pre = prootoftree;

prootoftree = prootoftree-

>right;}}

return res;}}

;

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。

輸入乙個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。

class

solution

void

f(string str,vector

&result,

int begin)

}else}}

void

swap

(char

&fir,

char

&sec)

};

劍指 offer 刷題記錄

任誰都躲不過找工作的問題,好希望能多準備一些時間,奈何時間不等人,每天刷幾道題,並且記錄下來吧 def replacespace s write code here num space 0 new s for i in range len s if i num space 1 for i in ra...

劍指offer刷題記錄

遞迴法 鍊錶的後續遍歷,並用self.k來記錄倒數節點的位置,找到了就返回找到的節點,否則返回none coding utf 8 class listnode def init self,x self.val x self.next none class solution def init self...

劍指offer刷題記錄 綜合

將乙個字串轉換成乙個整數,要求不能使用字串轉換整數的庫函式。數值為0或者字串不是乙個合法的數值則返回0 輸入描述 輸入乙個字串,包括數字字母符號,可以為空 輸出描述 如果是合法的數值表達則返回該數字,否則返回0 做這個題目做的真的很煩,最麻煩的就是判斷當前是否越界。可儲存的最大的正數末位為7,可儲存...