劍指offer3 從尾到頭列印鍊錶每個節點的值

2022-05-24 19:15:11 字數 1435 閱讀 4125

輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。

2.1 推薦的方法

(1)棧,迴圈

後進先出,我們可以用棧實現這種順序。每經過乙個結點的時候,把該節點放到乙個棧裡面,當遍歷完整個鍊錶後,再從棧頂開始逐個輸出結點的值,此時輸出的結點的順序已經反轉過來了。

2.2 不推薦的方法

(1)直接修改輸入資料

如果可以修改原來鍊錶的結構,那麼把鍊錶中鏈結結點的指標反轉過來,改變鍊錶的方向,然後就可以從頭到尾輸出了。

但是,列印通常是乙個唯讀操作,我們不希望列印時修改內容,所以就得想別的辦法。

(2)遞迴

遞迴在本質上就是乙個棧結構,於是很自然地又想到了用遞迴來實現。每訪問到乙個結點的時候,先遞迴輸出它後面的節點,再輸出該節點自身,這樣鍊錶的輸出結果就反過來了。

1

class

solution

12while (!nodes.empty())

16return

result;17}

18 };

view code

1 #include2 #include

3 #include 4 #include5

6using

namespace

std;78

struct

listnode9;

1314

void createlist(listnode *&head)

1531

else

3236}37

else

3841}42

}4344class

solution

55while (!nodes.empty())

59return

result;60}

61};

6263

64int

main()

6580 cout <

81 cout << "

--------列印原始字串序列!----------

"<

8283 cout << "

--------逆序列印----------

"<

84 vectorres;

85 res =a.printlistfromtailtohead(head);

8687

//輸出全部元素

88 vector::iterator it;

89for (it = res.begin(); it != res.end(); it++)

9093 cout <

94 system("

pause");

95return0;

96 }

view code

鍊錶詳解)

劍指offer(3) 從尾到頭列印鍊錶

輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。輸入為鍊錶的表頭 輸出為需要列印的 新鍊錶 的表頭 鍊錶是一種動態資料結構,是因為在建立鍊錶時,無須知道鍊錶的長度。當插入乙個結點時,我們只需要為新結點分配記憶體,然後調整指標的指向來確保新結點被鏈結到鍊錶中。記憶體分配不是在建立鍊錶時一次性完成,而是每新...

劍指offer 3 從尾到頭列印鍊錶

coding utf 8 class listnode def init self,x self.val x self.next none class solution 返回從尾部到頭部的列表值序列,例如 1,2,3 def init self self.result def printlistfr...

劍指offer 3 從尾到頭列印鍊錶

程式設計資料獲取 codelab 輸入乙個鍊錶,按煉錶值從尾到頭的順序返回乙個arraylist,鍊錶定義如下 struct listnode 下面提供3種思路 1 正序遍歷並儲存,逆序輸出 class solution reverse vecval.begin vecval.end 這裡得益於re...