zoukankan      html  css  js  c++  java
  • 从尾到头打印链表

    题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。

    思路1:使用栈

    思路2:递归

      1 #include<iostream>
      2 #include <stdlib.h>
      3 #include <stack>
      4 
      5 using namespace std;
      6 
      7 struct ListNode
      8 {
      9     int m_nValue;
     10     ListNode* m_pNext;
     11 };
     12 
     13 ListNode* CreateListNode(int value)
     14 {
     15     ListNode *pNode = new ListNode();
     16     pNode->m_nValue = value;
     17     pNode->m_pNext = NULL;
     18     return pNode;
     19 }
     20 
     21 void PrintListNode(ListNode* pNode)
     22 {
     23     printf("%d
    ", pNode->m_nValue);
     24 }
     25 
     26 //打印链表 
     27 void PrintList(ListNode* pHead)
     28 {
     29     ListNode* pNode = pHead;
     30     while(pNode != NULL)
     31     {
     32         cout << pNode->m_nValue<<" ";
     33         pNode=pNode->m_pNext;
     34     }
     35     cout << endl;
     36 }
     37 
     38 //在链表结尾添加一个结点 
     39 void AddToTail(ListNode** pHead, int value)
     40 {
     41     ListNode* pNew = new ListNode();
     42     pNew->m_nValue = value;
     43     pNew->m_pNext = NULL;
     44 
     45     if(*pHead == NULL)
     46     {
     47         *pHead = pNew;
     48     }
     49     else
     50     {
     51         ListNode* pNode = *pHead;
     52         while(pNode->m_pNext != NULL)
     53             pNode = pNode->m_pNext;
     54 
     55         pNode->m_pNext=pNew;
     56     }
     57 
     58 }
     59 
     60 
     61 //方法1: 用栈实现 
     62 void PrintListReversingly_Iteratively(ListNode* pHead)
     63 {
     64     ListNode* pNode = pHead;
     65     stack<ListNode*> nodes;
     66 
     67     while(pNode != NULL)
     68     {
     69         nodes.push(pNode);
     70         pNode = pNode->m_pNext;
     71     }
     72 
     73     while(!nodes.empty())
     74     {
     75         pNode = nodes.top();
     76         cout<<pNode->m_nValue<<" ";
     77         nodes.pop();
     78     }
     79     cout << endl;
     80 }
     81 
     82 //方法2: 递归 
     83 void PrintListReversingly_Recursively(ListNode* pHead)
     84 {
     85     ListNode* pNode = pHead;
     86     if(pNode != NULL)
     87     {
     88         if(pNode->m_pNext != NULL)
     89             PrintListReversingly_Recursively(pNode->m_pNext);
     90     }
     91     cout<<pNode->m_nValue<<" ";
     92 }
     93 
     94 // 1->2->3->4->5->6->7
     95 int main()
     96 {
     97     ListNode* pNode1 = CreateListNode(1);
     98     PrintList(pNode1);
     99 
    100     AddToTail(&pNode1,2);
    101     AddToTail(&pNode1,3);
    102     AddToTail(&pNode1,4);
    103     AddToTail(&pNode1,5);
    104     AddToTail(&pNode1,6);
    105     AddToTail(&pNode1,7);
    106 
    107     PrintList(pNode1);
    108     
    109     PrintListReversingly_Iteratively(pNode1);
    110     PrintListReversingly_Recursively(pNode1);
    111     
    112     return 0;
    113 }

  • 相关阅读:
    homework2
    一件关于Bug的小事
    软件测试作业三:有关控制流图、覆盖内容
    用CSS改变select框的样式
    lab1--ideal + junit
    软件测试作业二
    记一次曾经项目中遇到的错误
    02组_现代软件工程_第04次作业——利用4象限原理分析自身CanTool项目的构成
    02组_现代软件工程_第03次作业——对于自身评价(原有水平以及长远目标分析总结)
    02组_现代软件工程_第02次作业——初谈GitHub使用详解以及设计
  • 原文地址:https://www.cnblogs.com/sankexin/p/5644845.html
Copyright © 2011-2022 走看看