您的位置:首页 > 职场人生

从尾到头输出链表 【微软面试100题 第五十八题】

2014-11-16 10:55 211 查看
题目要求:

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

  参考资料:剑指offer第5题。

题目分析:

  可以用栈或者递归。

  栈把链表结点从头到尾依次存储,这样最终栈顶就是链表尾部。

  递归,对于当前结点,可以用递归输出当前结点之后的结点,再输出当前结点。

代码实现:

  

#include <iostream>
#include <stack>

using namespace std;

typedef struct ListNode
{
struct ListNode *next;
int data;
}ListNode;

void InitList(ListNode **head1);
void PrintListReverse(ListNode *head);
void PrintListReverseByStack(ListNode *head);

int main(void)
{
ListNode *h;

InitList(&h);
PrintListReverse(h);
cout << endl;
PrintListReverseByStack(h);
cout << endl;

return 0;
}
//递归
void PrintListReverse(ListNode *head)
{
if(head!=NULL)
{
if(head->next != NULL)
PrintListReverse(head->next);
cout << head->data << " ";
}
}
//栈
void PrintListReverseByStack(ListNode *head)
{
stack<ListNode *> store;
while(head!=NULL)
{
store.push(head);
head = head->next;
}
while(!store.empty())
{
cout << store.top()->data << " ";
store.pop();
}
}

//head:1-->5-->9-->NULL
void InitList(ListNode **head1)
{
ListNode *tmp = new ListNode;
tmp->data = 1;
*head1 = tmp;

tmp = new ListNode;
tmp->data = 5;
(*head1)->next = tmp;

ListNode *tmp1 = new ListNode;
tmp1->data = 9;
tmp1->next = NULL;
tmp->next = tmp1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: