1 單鏈表的倒置輸出

2021-07-04 01:54:08 字數 1050 閱讀 3922

// listnode

typedef struct lnode lnode;

分析:這是一道很有意思的面試題,此題以及此題的變體經常出現在各大公司的面試、筆試中。

看到這道題後,第一反應是從頭到尾輸出比較簡單。然後經過分析,這道題有以下幾種解決方法:

將鍊錶中節點的指標反轉過來,然後在從頭到尾輸出節點中的值

當要倒置輸出值時,我們會想到用棧來實現。所以這種方法是,遍歷鍊錶節點中的值,依次入棧,最後彈棧輸出

仔細分析這兩種方法,解決問題都需要兩步。方法一顯然不是面試官想要的演算法,而方法二需要維護乙個額外的棧,在不借用stl容器時,實現起來比較麻煩,那麼有沒有一步到位的演算法呢?

答案是肯定的,仔細分析第二種方法,需要用到棧來實現這個函式,而遞迴本質上就是乙個棧結構。於是想到要用遞迴的思想來解決問題。下面貼出用遞迴實現的**,這類問題要理解,並且能夠運用這種遞迴思想來解決類似的問題:

// given a head pointer, print key from the end to the beginning

void printlistreversely(lnode *head) 

printf("%d ", head->key);

}

擴充套件:

給定乙個未知長度的字串,從尾到頭輸出乙個字元竄(在不使用string.h檔案中strlen函式的前提下)

定義乙個函式求字串的長度,要求函式內部不能宣告任何變數

// print string reversely

void printstringreversely(const char *str)  else 

printf("%c", *str);

}// strlen implemented by recursion

int strlen(const char *str)

單鏈表的建立 輸出 倒置旋轉

宣告結構體型別的形式 sturct 結構體型別名 成員表列 定義結構體型別變數的三種方法 1 型別名 變數名 2 struct 結構體名 成員列表 變數名表列 3 sturct 成員列表 變數名列表 較少使用 typedef 在結構體中的用法 typedef struct a a,b 等同於 typ...

單鏈表倒置

單鏈表倒置,想要倒置應先整理一下倒置的思路,應先知道鍊錶分為幾種 typedef struct node linklist 2.雙向鍊錶 在雙向鍊錶中它的每個資料結點中都有兩個指標 分別指向直接後繼和直接前驅,資料域儲存資料。結構如下 typedef struct doublenode double...

單鏈表倒置

單鏈表倒置可以說是面試中提問率最高的題目了。網上有很多單鏈表倒置的演算法,但是實現解釋的不是很清晰。總結了一些演算法之後,把我自己認為好理解的簡單方便的演算法整理下來,方便以後自己複習。1.迭代 下面的 及注釋應該很好的解釋了頭插法來實現單鏈表倒置的思路。1 node reverse node no...