您的位置:首页 > 其它

逆序输出链表的元素

2013-11-16 11:15 656 查看
逆序输出链表的元素:一般输出元素都是不改变数据结构的啦,所以要逆序输出链表的元素,先去掉将每个结点指向下一个结点改成指向上一个结点的念想先,所以,最先可以想到的就是用递归实现咯,但是递归实现有个问题,就是当元素太多的时候,会导致栈溢出,所以,我们也可以自己实现栈来存储结点的嘛,下面就用了两种方法实现.

#include <iostream>
#include <stack>

typedef struct Node
{
int m_data;
Node* m_next;
}Node, *List;

// 逆序输出链表-递归实现
void printListInverse1(List list)
{
if (list)
{
printListInverse1(list->m_next);
std::cout<<list->m_data<<std::endl;
}
}

// 逆序输出链表-利用栈实现
void printListInverse2(List list)
{
std::stack<Node*> stack_noed;
while(!stack_noed.empty())
{
stack_noed.pop();
}
// 将所有元素先push到栈中先
while(list)
{
stack_noed.push(list);
list = list->m_next;
}
// 一个个出栈,然后输出
while(!stack_noed.empty())
{
std::cout<<stack_noed.top()->m_data<<std::endl;
stack_noed.pop();
}
}

// 插入元素
void insertList(List& list, int data)
{
if (list)
{
insertList(list->m_next, data);
}
else
{
Node* node = new Node;
node->m_data = data;
node->m_next = 0;
list = node;
}
}

int main()
{
Node* list = new Node;
list->m_next = 0;
insertList(list, 1);
insertList(list, 2);
insertList(list, 3);
insertList(list, 4);
insertList(list, 5);
insertList(list, 6);
// 递归方法
printListInverse1(list->m_next);
// 非递归方法
printListInverse2(list->m_next);
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表