单链表的逆序输出

来源:互联网 发布:写轻小说的软件 编辑:程序博客网 时间:2024/06/05 07:53
/*单链表的顺序输出,即从头结点开始,一次后移,输出;单链表的逆序输出,可先将其结点从头结点开始一次入栈,再从栈顶开始,依次出栈即可*/
 
 
//先创建链表结点的结构体
链表结点.h
structListNode
{
    intvalue;
    ListNode *next;
};
  
#include <iostream>
#include <stack>
#include "链表结点.h"
usingnamespacestd;
  
//创建链表
ListNode *creatList()
{
    intvalue=0;
    ListNode* pHead=newListNode();
    ListNode* pNode=pHead;
    while((value+1) != 0)
    {
        cin>>value;
        ListNode *pNew=newListNode();
        pNew->value=value;
        pNew->next=NULL;
  
        pNode->next=pNew;
        pNode=pNew;
  
    }
    pHead=pHead->next;
  
    returnpHead;
}
  
//逆序输出
voidprintListreverse(ListNode *pHead)
{
    stack<ListNode*> nodes;
      
    ListNode* pNode=pHead;
    while(pNode != NULL)
    {
        nodes.push(pNode);
        pNode=pNode->next;
    }
  
    while(!nodes.empty())
    {
        pNode=nodes.top();
        cout <<pNode->value <<" ";
        nodes.pop();
    }
}
  
  
int main()
{
    ListNode*phead=creatList();
    ListNode*pnode=phead;
  
    cout <<"顺序输出链表:"<<endl;
    while(pnode!=NULL)
    {
        cout <<pnode->value <<" ";
        pnode=pnode->next;
    }      //此时pnode指向最后的节点
  
    cout <<"\n逆序输出链表:"<<endl;
    printListreverse(phead);  //必须要保证phead是链表的第一个节点,因此要声明两个指针,同时指向链表的第一个节点
    cout <<endl;
    return0;
}
原创粉丝点击