演算法學習記錄三(C++)--->從尾到頭列印連結串列每個節點的值
描述
- 輸入一個連結串列,從尾到頭列印連結串列每個節點的值。
思路
對於這種顛倒順序的問題,我們應該就會想到棧,後進先出。所以,這一題要麼自己使用棧,要麼讓系統使用棧,也就是遞迴。注意連結串列為空的情況。時間複雜度為O(n
示例一 展示每個節點的逆序列印 (棧–>C)
// 從尾到頭列印連結串列,使用棧
void RPrintList(ListNode * pHead)
{
std::stack<ListNode *> s;
ListNode * pNode = pHead;
while(pNode != NULL)
{
s.push(pNode);
pNode = pNode->m_pNext;
}
while(!s.empty())
{
pNode = s.top();
printf("%d\t", pNode->m_nKey);
s.pop();
}
}
示例一 展示每個節點的逆序列印 (遞迴–>C)
// 從尾到頭列印連結串列,使用遞迴
void RPrintList(ListNode * pHead)
{
if(pHead == NULL)
{
return;
}
else
{
RPrintList(pHead->m_pNext);
printf("%d\t", pHead->m_nKey);
}
}
示例二 本題用棧實現(C++)
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
// 棧的方式
/*
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
// 初始化棧
stack<int>temp;
vector<int>res;
// 往棧裡面push
while(head){
// 入棧
temp.push(head->val);
head = head->next;
}
// 從棧裡面進行取出資料 push_back可以理解為OC裡面的addObject
while(temp.size()){
// 每次都是從棧頂拿資料
res.push_back(temp.top());
// 出棧
temp.pop();
}
return res;
}
};
*/
示例二 本題用遞迴實現(C++)
// 遞迴方法一
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
if(head == NULL)return{};
if(head->next == NULL) return {head->val};
vector<int>res = printListFromTailToHead(head->next);
res.push_back(head->val);
return res;
}
};
*/
// 遞迴方法二
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int>res;
if(head != NULL){
res = printListFromTailToHead(head->next);
res.push_back(head->val);
}
return res;
}
};
相關文章
- 劍指offer-從尾到頭列印連結串列-phpPHP
- [每日一題] 第九題:從尾到頭列印連結串列每日一題
- 劍指Offer面試題5(Java版):從尾到頭列印連結串列面試題Java
- 單連結串列從尾到頭輸出元素
- [程式設計題]從尾到頭列印連結串列 牛客網練習 java遞迴程式設計Java遞迴
- 雙向連結串列 尾節點插入
- 演算法學習記錄十二(C++)--->連結串列題目集合演算法C++
- 劍指offer(java實現)第3題“從尾到頭列印連結串列”-牛客網Java
- 連結串列面試題(一)---刪除一個無頭單連結串列的非尾結點面試題
- Redis筆記 — 連結串列和連結串列節點的API函式(三)Redis筆記API函式
- 定義一個函式,輸入一個連結串列的頭節點,反轉該連結串列並輸出反轉後連結串列的頭節點函式
- 遞迴演算法-不帶頭節點的單連結串列遞迴演算法
- 劍指OFFER-從頭到尾列印連結串列(Java)Java
- 帶頭結點的單連結串列實現(C++)C++
- K個節點翻轉連結串列
- 【JavaScript】前端演算法題(重建二叉樹、反向輸出連結串列每個節點)JavaScript前端演算法二叉樹
- 有a,b兩個已按學號升序排序的連結串列,每個連結串列中的結點包括學號、成績。要求把兩個連結串列合併,仍按學號升序排列。...排序
- Leetcode刷題之連結串列增加頭結點的字首節點LeetCode
- 圖解帶頭節點的單連結串列的反轉操作圖解
- 帶頭結點的連結串列操作題
- 程式碼隨想錄演算法訓練營第四天 | 連結串列 24.兩兩交換連結串列中的節點 19.刪除連結串列的倒數第N個節點 142.環形連結串列II演算法
- 連結串列面試題(四)---查詢連結串列的中間節點面試題
- 演算法學習記錄十(C++)--->數值的整數次方演算法C++
- Java連結串列指標確實好煩 - 交換連結串列中連續的兩個節點的位置Java指標
- 頭插法和尾插法建立連結串列區別
- 多種方法從尾部移除指定位置的連結串列節點
- 牛客網高頻演算法題系列-BM3-連結串列中的節點每k個一組翻轉演算法
- 劍指offer——兩個連結串列的第一個公共結點C++C++
- [連結串列]leetcode1019-連結串列中的下一個更大節點LeetCode
- 程式碼隨想錄演算法訓練營day04|24.兩兩交換連結串列中的節點,19.刪除連結串列的倒數第N個節點,面試題 02.07.連結串列相交,142.環形連結串列II演算法面試題
- Day4(連結串列)|24. 兩兩交換連結串列中的節點 & 19.刪除連結串列的倒數第N個節點 & 面試題 02.07. 連結串列相交 &142.環形連結串列II面試題
- 結點插入到單連結串列中
- 複習下C 連結串列操作(雙向迴圈連結串列,查詢迴圈節點)
- Remove Duplicates from Sorted List 去除連結串列中重複值節點REM
- 程式碼隨想錄day4 | 24 兩兩交換連結串列節點 19 刪除倒數第n個節點 142 環形連結串列
- 單連結串列的尾插,頭插,遍歷,查詢和插入
- 04天【程式碼隨想錄演算法訓練營34期】 第二章 連結串列part02 (● 24. 兩兩交換連結串列中的節點 ● 19.刪除連結串列的倒數第N個節點 ● 面試題 02.07. 連結串列相交 ● 142.環形連結串列II )演算法面試題
- **24. 兩兩交換連結串列中的節點****19.刪除連結串列的倒數第N個節點****面試題 02.07. 連結串列相交****142.環形連結串列II**面試題