剑指Offer: 面试题5 从尾到头打印链表
2014-09-06 01:02
711 查看
/* 从尾到头打印链表: 输入一个链表的头结点,从尾到头反过来打印出每个节点的值 输入一个链表,从尾到头打印链表每个节点的值。 输入: 每个输入文件仅包含一组测试样例。 每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完毕。-1本身不属于链表。 输出: 对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行。 样例输入: 1 2 3 4 5 -1 样例输出: 5 4 3 2 1 */ /* 关键: 逆序输出,这得采用头插法 1 典型的后进先出,可以在遍历的同时,加上一个栈表示。关键:如何建立单链表,可以采用头插法 */ #include <stdio.h> #include <stack> #include <stdlib.h> using namespace std; typedef struct Node { int _iValue; struct Node* _next; }Node; void reversePrint(Node* pHead,stack<Node*>& stackNode) { while(!stackNode.empty()) { Node* pNode = stackNode.top(); stackNode.pop(); printf("%d\n",pNode->_iValue); } } void freeList(Node* pHead) { Node* pDel; while(pHead != NULL) { pDel = pHead; pHead = pHead->_next; delete pDel; pDel = NULL; } } void process() { int x; bool isFirst = true; Node* pHead,*pCur,*pNew; stack<Node*> stackNode; while(EOF != scanf("%d",&x))//采用尾插法建立单链表,这是逆序 { if(x == -1) { break; } if(!isFirst)//建立其余节点 { pNew = new Node(); pNew->_iValue = x; pNew->_next = NULL; stackNode.push(pNew); pCur->_next = pNew; pCur = pNew; } else//建立头节点 { pHead = new Node(); pHead->_iValue = x; pHead->_next = NULL; stackNode.push(pHead); pCur = pHead; isFirst = false; } } //尾插法是顺序,下面通过栈来逆序打印 reversePrint(pHead,stackNode); freeList(pHead);//记住,一定要释放内存 } int main(int argc,char* argv[]) { process(); getchar(); system("pause"); return 0; }
相关文章推荐
- 剑指Offer面试题5[从尾到头打印链表]
- 剑指offer《面试题5:从尾到头打印链表》
- 《剑指Offer》面试题:从尾到头打印链表
- 剑指offer 面试题5 从尾到头打印链表(栈实现)
- 《剑指offer》【面试题5:从尾到头打印链表】
- 剑指Offer系列-面试题5:从尾到头打印链表
- 剑指Offer面试题5(Java版):从尾到头打印链表
- 剑指offer面试题5:从尾到头打印链表
- 剑指offer--面试题5:从尾到头打印链表--Java实现
- 剑指offer面试题5——链表之从尾到头打印链表
- 《剑指Offer》面试题五之从尾到头打印链表
- 剑指offer--面试题5:从尾到头打印链表
- (剑指Offer)面试题5:从尾到头打印链表
- 剑指Offer面试题5(Java版):从尾到头打印链表
- 剑指Offer面试题6:从尾到头打印链表
- 剑指offer之面试题5:从尾到头打印链表
- 剑指offer——面试题5:从尾到头打印链表
- 《剑指Offer》面试题5:从尾到头打印链表
- 剑指offer面试题5:从尾到头打印链表
- 剑指Offer(第二版)面试题6:从尾到头打印链表