牛客网《剑指Offer》3.从尾到头打印链表

博客围绕输入链表按值从尾到头输出展开。先给出题目,即输入链表返回值从尾到头的ArrayList。解题思路是利用栈的LIFO特性,先将节点值压栈再弹出存入vector。代码实现后还提出可利用递归改进,最后提及单链表的增删节点操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

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

单链表的数据结构如下:

struct ListNode {
        int val;
        struct ListNode *next;
        ListNode(int x) :
              val(x), next(NULL) {
        }
  };

解题思路

由于是从尾到头进行打印,想到LIFO,所以使用栈的结构。

先将链表中的每个节点值压栈

再将栈中的每个值依次弹出,存放入需要返回的vector里。

代码实现

 vector<int> printListFromTailToHead(ListNode* head) {
        vector<int> vec;
        stack<int> stk;
        ListNode* p=head;
        while(p!=NULL){
            stk.push(p->val);
            p=p->next;
        }
        while(!stk.empty()){
            vec.push_back(stk.top());
            stk.pop();
        }
        return vec;
    }

算法改进

由于是与栈有关的操作,因此能够使用递归操作。

vector<int> vec;
void printListFromTailToHead(ListNode* head) {
       if(head!=NULL){
            if(head->next!=NULL){
                printListFromTailToHead(head->next);
            }
            vec.push_back(head->val);
        }
    }

单链表的其他操作:增加、删除节点操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值