題目描述
輸入一個鏈表的頭結點,從尾到頭反過來打印出每個結點的值。
解析
逆序打印鏈表,我們遍歷鏈表只能從頭到尾,現在要求我們從尾到頭。後進先出,可以想到用棧存儲遍歷的節點,然後打印出棧序列。
而遞歸的本質就是棧結構,在打印本節點之前,先打印本節點的下一個節點。
實現
void PrintListReversingly_Iteratively(ListNode* pHead){
//用棧存儲所有鏈表節點,然後出棧
std::stack<ListNode*> s;
//將所有鏈表節點入棧
while(pHead!=NULL){
s.push(pHead);
pHead=pHead->m_pNext;
}
//打印輸出所有棧元素
while(s.empty() == false){
printf("%d\t",s.top()->m_nValue);
s.pop();
}
}
void PrintListReversingly_Recursively(ListNode* pHead){
//判斷傳參有效性
if(pHead == NULL)
return;
//遞歸方法,打印本節點前,先打印本節點的下一個節點
if(pHead->m_pNext != NULL){
PrintListReversingly_Recursively(pHead->m_pNext);
}
printf("%d\t",pHead->m_nValue);
}