反向打印单向链表
单向链表的反向打印,即从表尾开始到表头结束,由于是单向的我们无法得到前一个节点的指针。
一种办法是从头开始把节点压入一个栈,然后通过栈输出。
当然还有一种办法就是递归。
以下是这2种方法的代码,第一种方法运用到STL的stack。
//反转打印 void PrintListReversing(ListNode* phead) { if( phead == NULL) return; std::stack<ListNode*> nodes; ListNode* pNode = phead; while(pNode != NULL) { nodes.push(pNode); pNode =pNode->p_next; } while( !nodes.empty()) { pNode = nodes.top(); cout<<pNode->data<<endl; nodes.pop(); } }
//反转打印 void PrintListReversing(ListNode* phead) { if( phead == NULL) return; if(phead->p_next !=NULL) { PrintListReversing(phead->p_next); } cout<<phead->data<<endl; }
递归方法代码简化很多,很简洁,但是如果链表很长那么递归方法带来的开销将会很大。所以在数据很多时一般采用循环方式而放弃递归来提高执行效率

浙公网安备 33010602011771号