每日N題 字元過濾 鍊錶複製

2021-06-08 21:09:31 字數 1301 閱讀 5107

前言:以後爭取每天搞一兩個有意思的題做做

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...