前言:以後爭取每天搞一兩個有意思的題做做
1、 刪除字串開始及末尾的空白符,並且把陣列中間的多個空格(如果有)符轉化為1個。
解答:【方案一】如果這是實際工作中用於資料清洗,顯然可以直接用個指令碼處理不用什麼開發。不多說直接上**:
原始資料:
[work@localhost test]$cat file
aa bb a
jj dd kk
ll kk o
處理指令碼:
驗證:[work@localhost test]$cat file |sh filter.sh
aa bb a
jj dd kk
ll kk o
【方案二】顯然這不是面試官的目的,他肯定希望你的回答思路是,運用什麼演算法去解析出來這個字串。
對於每乙個讀入的資料,定義乙個head和temp,tail,head指向第乙個非空字元位址,temp和tail向後移動,遇到第乙個空格時temp不再移動,tail繼續直到非空格,此時(1)tail如果是\n,則temp+1付為\n退出;(2),如果不是則temp+1所指向字元賦值為tail所指向資料;依次類推。
一次遍歷可達到目的。
2、鍊錶轉殖。鍊錶的結構為:
typedef struct list list;
解答:這個顯然不是個鍊錶,而是個有向有環圖。
其實這裡有個問題並沒有明確,就是只是複製圖的結構,還是說連裡面的資料也一同複製了。因為假如只是複製圖結構的話,我們可以用裡面的data變數作為標誌,表示此節點是否被讀過,這樣簡單多了。
(1) 假設我們只複製圖結構;
兩個圖我們分別叫他new_list和old_list,我們在old_list中進行遞迴遍歷:
遍歷過程:
【a】 每訪問乙個節點,如果發現此節點沒訪問過,則將其data變數置為已訪問,否則返回訪問失敗;
【b】 遞迴訪問middle;如果訪問成功則同時在new_list中新建乙個節點並把位址付給當前節點的middle,同時new_list也同樣遞迴進入當前的middle節點;
【c】 遞迴訪問next;如同middle;
(2) 複製圖結構的同時,複製裡面的資料;
我們要複製裡面的資料,也就是說data變數要存資料,我們不能破壞他。這時,我們需要外部引入標誌,比如我們用乙個set或vector儲存標誌,裡面儲存的是old_list中被訪問過的節點的位址;
總結:隨便寫寫的,讓自己有點事做要不又玩了,可能方法有考慮不周的地方,或有更好方案。如有異議,請賜教。
N25 複雜鍊錶的複製
輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 思路 1 遍歷鍊錶,複製每個結點,如複製結點a得到a1,將結點a1插到結點a後面 2 重新...
每日演算法 刪除鍊錶的倒數第N個節點
給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。示例 給定乙個鍊錶 1 2 3 4 5,和 n 2.當刪除了倒數第二個節點後,鍊錶變為 1 2 3 5.說明 給定的 n 保證是有效的。高階 你能嘗試使用一趟掃瞄實現嗎?一次掃瞄實現的意思是我們要在迴圈中想辦法尋找到倒數第n 1個節點...
判斷鍊錶前N個字元是否中心對稱
7 題目 設單鏈表的表頭指標為h 這裡我習慣性的用了head 結點結構由data和next兩個域構成,其中data域為字元型。試設計演算法判斷該鍊錶的前n個字元是否中心對稱。例如xyx,xyyx都是中心對稱。include include include define man err 0 defin...