zoukankan      html  css  js  c++  java
  • 从尾到头输出链表 【微软面试100题 第五十八题】

    题目要求:

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

      参考资料:剑指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;
    }
  • 相关阅读:
    时空权衡之计数排序
    何时发生隐式类型转换
    常量指针与指针常量的区别
    虚函数有关面试题
    C++中数组定义及初始化
    InputStream类的available()方法
    FORK()函数
    面向对象三大基本特性,五大基本原则
    SpringMVC工作原理
    java文件的上传
  • 原文地址:https://www.cnblogs.com/tractorman/p/4101155.html
Copyright © 2011-2022 走看看