鍊錶的結構很簡單,它由指標把若干個節點連線成鏈狀結構。由於鍊錶是一種哄抬的資料結構,其操作需要對指標進行操作。因為在船艦鍊錶時,無須知道鍊錶的長度。當插入乙個節點時,我們只需要為新節點分配記憶體,然後調整指標的指向來確保新節點被鏈結到鍊錶當中。記憶體分配不是在建立鍊錶時一次性完成的,而是每新增乙個節點分配一次記憶體。由於沒有閒置的記憶體,鍊錶的空間效率比陣列高。由於鍊錶中的記憶體不是一次性分配的,因而我們無法保證鍊錶的記憶體和陣列一樣是連續的。因此如果想在鍊錶中找到它的第i個結點,我們只能從頭結點開始,沿著指向下乙個節點的指標遍歷鍊錶,它的時間效率為o(n).
1、把鍊錶的末尾節點的指標指向頭節點,從而形成乙個環形鍊錶
2、鍊錶中的結點中除了有指向下乙個結點的指標,還有指向前乙個結點的指標。這就是雙向鍊錶
3、鍊錶中的結點中除了有指向下乙個結點的指標,還有指向任意結點的指標,這就是複雜鍊錶。
題目:從頭到尾列印鍊錶
輸入乙個鍊錶的頭結點,從尾到頭反過來列印出每個結點的值
解題思路:看到這道題目後,很自然想到從頭到尾輸出會比較簡單,於是就想著把鍊錶反轉過來,改變鍊錶的方向,然後就可以從頭到尾輸出了。但該方法會改變原來鍊錶的結構。是否允許在列印鍊錶的時候修改鍊錶的結構?這個取決於面試官的需求,因此在面試的時候我們需要詢問清楚面試官的要求。
在面試中如果我們打算修改輸入的資料,最好先問下面試官是不是允許做修改。
通常列印是乙個唯讀操作,我們不希望列印時修改內容。假設面試官也要求這個題目不能改變鍊錶的結構。
接下來我們想到解決這個問題肯定要遍歷鍊錶。遍歷的順序是從頭到尾的順序,可輸出的順序卻是從尾到頭。也就是說第乙個遍歷到的結點最後乙個輸出,而最後乙個遍歷到的結點第乙個輸出。這就是典型的「後進先出」,我們可以用棧實現這種順序。每經過乙個結點的時候,把該結點放到乙個棧中。當遍歷完整個鍊錶後,再從棧頂開始逐個輸出結點的值。
從頭到尾列印鍊錶
輸入乙個鍊錶的頭節點,從尾到頭反過來返回每個節點的值 用陣列返回 題目描述了乙個先進後出的結構,很容易想到棧,進而想到遞迴,遞迴也可以實現先進後出,只要將本節點的操作置於遞迴之後即可。棧 definition for singly linked list.public class listnode ...
從頭到尾列印鍊錶
牛客網上面的乙個題 題目描述 輸入乙個鍊錶,按鍊錶從尾到頭的順序返回乙個arraylist。struct listnode class solution for vector reverse iterator riter list.rbegin riter list.rend riter retur...
3 從頭到尾列印鍊錶
題目鏈結 題目描述 輸入乙個鍊錶,按鍊錶從尾到頭的順序返回乙個arraylist。儲存倒序鍊錶的值,首先想到的想法是順序遍歷將值存到堆疊中,再將值從堆疊轉到vector中。時間複雜度o n 空間複雜度o n struct listnode class solution vector int v wh...