题目要求:
输入一个链表的头结点,从尾到头反过来输出每个结点的值。
参考资料:剑指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;
}