剑指offer:5-从尾到头打印链表

来源:互联网 发布:js选择排序 编辑:程序博客网 时间:2024/05/17 23:05

代码如下:

//题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。#include <iostream>#include <stdlib.h>#include <stack>using namespace std;//链表节点结构.struct ListNode{int m_nKey;ListNode *m_pNext;};//创建一个链表结点ListNode* create_list_node(int value){ListNode *pNode = new ListNode();pNode->m_nKey = value;pNode->m_pNext = NULL;return pNode;}//向链表末尾添加结点.//注意这里pHead是一个指向指针的指针,在主函数中一般传递的是引用。//因为如果要为链表添加结点,那么就会修改链表结构,所以必须传递引用才能够保存修改后的结构。void add_to_tail(ListNode **pHead,int val){ListNode *pNew = new ListNode();pNew->m_nKey = val;pNew->m_pNext = NULL;//链表为空.if (*pHead == NULL)*pHead = pNew;//链表不为空.else{ListNode * pNode = *pHead;while (pNode->m_pNext != NULL)pNode = pNode->m_pNext;pNode->m_pNext = pNew;}}//遍历链表中的所有结点void print_list(ListNode* pHead){ListNode *pNode = pHead;while(pNode != NULL){cout << pNode->m_nKey << " ";pNode = pNode->m_pNext;}cout<<endl;}//版本1:“先入后出”,用栈的方式实现.void print_list_reversely(ListNode *pHead){//存放链表指针的栈.stack <ListNode*> nodes;ListNode* pNode = pHead;//将所有链表指针存入栈.while (pNode != NULL){nodes.push(pNode);pNode = pNode->m_pNext;}while (!nodes.empty()){pNode = nodes.top();cout << pNode->m_nKey << " ";nodes.pop();}cout << endl;}int main(){ListNode* pNode1 = create_list_node(1);//创建一个结点print_list(pNode1);//打印add_to_tail(&pNode1,2);//为链表添加一个结点add_to_tail(&pNode1,3);//为链表添加一个结点add_to_tail(&pNode1,4);//为链表添加一个结点add_to_tail(&pNode1,5);//为链表添加一个结点add_to_tail(&pNode1,6);//为链表添加一个结点add_to_tail(&pNode1,7);//为链表添加一个结点print_list(pNode1);//打印print_list_reversely(pNode1);return 0;}
运行结果:


转自:http://www.cnblogs.com/xwdreamer/archive/2012/04/26/2471962.html

原创粉丝点击