链表在数据结构中是一种非常重要的线性数据结构,也是各类面试笔试中常常涉及的问题。其中最常见的一个问题就是“输入一个链表的头结点,从尾到头反过来打印出每个节点的值”,简单说就是逆转链表。当然,有人会发现,这其实就是剑指Offer中的一道题。这道题的实现我已经上传至 https://github.com/chenyufeng1991/ReverseLinkedList_Stack 。
这道题最经典的实现就是使用栈。在我们正向遍历链表的每个节点的时候,分别把每一个节点入栈,等到所有节点入栈后,再从栈顶弹出每一个节点,此时弹出的节点顺序就是链表从尾到头的顺序。而栈结构在C++中使用STL是很容易实现的,代码如下:
/**
* 输入一个链表的头结点,从尾到头打印链表的每一个节点
*/
#include <iostream>
#include <stdlib.h>
#include <stack>
using namespace std;
typedef struct ListNode{
int element;
struct ListNode *next;
}Node;
void CreateLinkedList(Node **head);
void ReverseLinkedList(Node *pNode);
int main(int argc, const char * argv[])
{
Node *pList;
CreateLinkedList(&pList);
ReverseLinkedList(pList);
r