从尾到头打印链表

来源:互联网 发布:中国贸易摩擦数据 编辑:程序博客网 时间:2024/06/01 23:08

题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。
思路:看到此题,直观的想法就是把链表里面正序的数据放入栈中,然后打印出来。
代码如下:
法一:显示用栈:

typedef int DataType;typedef struct Node{    DataType Data;    struct Node *Next;}ListNode;void PrintListRever(ListNode *pHead){    if (pHead == NULL) return;    ListNode *ptr = pHead;    stack<ListNode*> mystack;    while (ptr != NULL)    {        mystack.push(ptr);        ptr = ptr->Next;    }    while (!mystack.empty())    {        ListNode *p = mystack.top();        cout << p->Data << "  ";        mystack.pop();    }}

法二:因为递归也是利用了函数栈,所以我们可以一直递归到最后一个结点,然后在回撤的时候,从最后一个打印,知道打印到第一个数据。
缺点:链表结点如果非常多,可能会造成栈溢出。
代码如下:

void PrintListRever(ListNode *pHead){    assert(pHead != NULL);    if (pHead->Next != NULL)    {        PrintListRever(pHead->Next);    }    cout << pHead->Data << "   ";}
0 0
原创粉丝点击