【剑指offer】-从尾到头打印链表-03/67

简介: 【剑指offer】-从尾到头打印链表-03/67

1. 题目描述:

输入一个链表,按链表从尾到头的顺序返回一个ArrayList。

2. 题目分析

2.1 相似题型

  1. 一般的思维来讲,该题直接建立链表,然后在建立链表的时候,直接建立的是反转的链表,题型链接如下:
    数据结构实验之链表二:逆序建立链表
  2. 该题的要求是返回一个ArrayList(数组),不能简单的使用输入输出实现

2.2 c++栈的用法

  1. push(x) – 压一个数到栈顶
  2. pop() – 移除栈顶的元素,不返回任何对象
  3. top() – 返回栈顶端的元素
  4. getMin() – 检索栈中的最小值

2.3 本题做法

  1. 建立一个vector类型的数组(result)
  2. 建立一个栈(stack-arr),用来做链表和数组之间的传递
  3. 遍历链表,将链表中的数值依次使用push来依次压到栈顶
    类型如下:
链表数值:1 2 3 4 5
压完的栈:5 4 3 2 1 (先进后出)
  1. 将栈里面的数值依次取出(利用push取出栈顶元素,push_back插入到数组尾部),存入result数组当中,返回该数组

3. 题目代码

/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head)
    {
        vector <int> result;
        stack <int> arr;
        ListNode *p = head;
        int sum = 0;
        while(p != NULL)
        {
            arr.push(p->val);
            p = p->next;
        }
        int len = arr.size();
        int num;
        for(int i = 1; i <= len; i++)
        {
         result.push_back(arr.top());
         arr.pop();
        }
        return result;
    }
};
//运行时间:2ms
//占用内存:592k

数据结构实验之链表二:逆序建立链表【代码】

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
struct node
{
    int data;
    struct node *next;
};
int main()
{
    struct node *p, *head;
    head = (struct node *)malloc(sizeof(struct node));
    head->next = NULL;
    int n;
    cin>>n;
    for(int i = 1; i <= n; i++)
    {
        p = (struct node *)malloc(sizeof(struct node));
        cin>>p->data;
        p->next = head->next;
        head->next = p;
    }
    for(p = head->next; p != NULL; p = p->next)
    {
        if(p->next == NULL)
        {
            cout<<p->data<<endl;
        }
        else
        {
            cout<<p->data<<" ";
        }
    }
    return 0;
}

4. 总结

  1. 学校中的ACM训练题目和这种题目相差较大,在学校中基本没有用过C++中的一些函数,比如上面的一些关于栈的用法。所以,学习的路还有很长。
  2. 关于vector的相关资料——vector详解——vector操作
  3. 继续学习吧,太菜了。


相关文章
|
1月前
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
46 0
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
52 5
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
Leetcode题目"剑指 Offer 18. 删除链表的节点"的Python解决方案,通过使用双指针法找到并删除链表中值为特定数值的节点,然后返回更新后的链表头节点。
41 4
|
6月前
【一刷《剑指Offer》】面试题 17:合并两个排序的链表
【一刷《剑指Offer》】面试题 17:合并两个排序的链表
|
6月前
【一刷《剑指Offer》】面试题 16:反转链表
【一刷《剑指Offer》】面试题 16:反转链表
|
6月前
【一刷《剑指Offer》】面试题 15:链表中倒数第 k 个结点
【一刷《剑指Offer》】面试题 15:链表中倒数第 k 个结点
|
6月前
|
机器学习/深度学习
【一刷《剑指Offer》】面试题 13:在 O(1) 时间删除链表结点
【一刷《剑指Offer》】面试题 13:在 O(1) 时间删除链表结点
|
6月前
【一刷《剑指Offer》】面试题 5:从尾到头打印链表
【一刷《剑指Offer》】面试题 5:从尾到头打印链表
|
6月前
剑指 Offer 18. 删除链表的节点
剑指 Offer 18. 删除链表的节点
43 0
|
5月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表