從尾到頭列印鍊錶
問題:輸入乙個鍊錶的頭結點,從尾到頭反過來列印出每個結點的值。
no1:
看見這個問題我們的第一反應就是將這個單鏈表反轉一下,這樣我們就可以將這個鍊錶從尾到頭的列印了。具體的鍊錶的反轉,我們可以參考
no2:
這時候我們想要的是從尾到頭列印這個鍊錶,就可以用到棧這種儲存結構,棧是一種可以實現「先進後出」的一種儲存結構。我們可以將鍊錶的所有元素壓入棧中,然後在將棧裡面的所有的元素依次列印出來,這樣我們就實現了將鍊錶中的元素從尾到頭的列印。
部分**如下:
struct listnode
void printlistreversingly_iteratively(listnode * phead)
while (!nodes.empty())
}
no3:
我們可以考慮遞迴的辦法,首先我們找到鍊錶的尾部,然後依次的列印,返回上一次情況。
部分**如下:
struct listnode
void printlistreversingly_recursively(listnode * phead)
printf("%d\t",phead->m_nkey);
}}
比較:對於第一種方法,我們改變了鍊錶的結構,這個我們需要了解清楚是否可以改變鍊錶的結構。
對於第二種方法,我們使用了棧這種儲存結構。
對於第三種方法,我們使用了遞迴,但是我們需要注意,當鍊表非常長的時候,有可能導致函式呼叫棧溢位。
這三種方法我們可以根據題目的要求,具體的選擇某種方式。
劍指Offer 從尾到頭列印鍊錶
題目1511 從尾到頭列印鍊錶 時間限制 1 秒 記憶體限制 128 兆 特殊判題 否 提交 1082 解決 350 題目描述 輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。輸入 每個輸入檔案僅包含一組測試樣例。每一組測試案例包含多行,每行乙個大於0的整數,代表乙個鍊錶的節點。第一行是鍊錶第乙個節點的...
劍指offer 從尾到頭列印鍊錶
輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。輸入描述 輸入為鍊錶的表頭 輸出描述 輸出為需要列印的 新鍊錶 的表頭 分析 題目本意是用的棧結構的先入後出,但是有了容器類的高階方法之後,使用棧的意義就不大了。c struct listnode class solution listnode p hea...
劍指Offer 從尾到頭列印鍊錶
輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。個人認為如果本題就只是列印的話,最好不要反轉鍊錶 你什麼時候見過列印函式改變資料結構了的 我的思路 儲存順序值,然後反轉。注意 1 reverse vprint.begin vprint.end algorithm的使用!2 重新構造。以上兩種衡量選擇。另...