從尾到頭列印鍊錶

2021-06-22 22:00:45 字數 2015 閱讀 3820

題目描述:輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。

輸入:每個輸入檔案僅包含一組測試樣例。

每一組測試案例包含多行,每行乙個大於0的整數,代表乙個鍊錶的節點。第一行是鍊錶第乙個節點的值,依次類推。當輸入到-1時代表鍊錶輸入完畢。-1本身不屬於鍊錶。

輸出:對應每個測試案例,以從尾到頭的順序輸出鍊錶每個節點的值,每個值佔一行。

樣例輸入:

123

45-1

樣例輸出:

543

21

分析:

很容易想到榮棧來實現;

其實也可以用遞迴來實現,遞迴的本質就是乙個棧結構;

如果鍊錶特別長,會導致函式呼叫的層級很深,從而有可能導致函式呼叫棧溢位;

現實用棧來實現迴圈的點嗎更容易懂;

#include#include#include#include "list.h"

using namespace std;

void printlistreversingly_iteratively(listnode *phead)

while(!nodes.empty()) }

void printlistreversingly_recursively(listnode *phead)

printf("%d\t",phead->m_nvalue); }}

void test(listnode* phead)

void test1()

// 只有乙個結點的鍊錶: 1

void test2()

// 空鍊錶

void test3()

listnode * createlistnode(int value)

void connectlistnodes(listnode* pcurrent, listnode* pnext)

pcurrent->m_pnext=pnext;

}void printlistnode(listnode* pnode)

void printlist(listnode* phead)

printf("\nprintlist is ends\n");

}void destroylist(listnode* phead)

pnode=null;

}void addtotail(listnode** phead, int value)

}void removenode(listnode** phead, int value)

else }

if(ptobedeleted!=null) }

int main()

list.h

#ifndef _list_h_  

#define _list_h_

struct listnode

;listnode * createlistnode(int value);

void connectlistnodes(listnode* pcurrent, listnode* pnext);

void printlistnode(listnode* pnode);

void printlist(listnode* phead);

void destroylist(listnode* phead);

void addtotail(listnode** phead, int value);

void removenode(listnode** phead, int value);

#endif /*_list_h_*/

結果:

從尾到頭列印鍊錶

1.問題描述 輸入乙個鍊錶的頭結點,從尾到頭反過來列印出每個結點的值。來自 劍指offer 2.分析 通常遍歷乙個鍊錶都是從頭開始遍歷的,現在讓我們從尾到頭列印結點的值,我們可以使用棧這種資料結構 因為先進後出 來儲存鍊錶,然後在彈出棧中的元素,從而從尾到頭列印出結點的值。另外 遞迴在本質上就是乙個...

從尾到頭列印鍊錶

1 第一種方法 我們可以利用 stack 先進後出的特性來進行中轉。stacks node p head next while p while s.empty 這樣很容易就能讓鍊錶倒序輸出。2 第二種方法 我們也可以用遞迴函式來倒換 void printlistrever node phead pr...

從尾到頭列印鍊錶

題目 輸入乙個鍊錶的頭結點,從尾到頭反過來列印出每個結點的值。鍊錶結點定義如下 struct listnode 解決這個問題肯定要遍歷鍊錶。遍歷的順序是從頭到尾的順序,可輸出的順序卻是從尾到頭。也就是說第乙個遍歷到的結點最後乙個輸出,而最後乙個遍歷到得結點第乙個輸出。這就是典型的 後進先出 可以用棧...