从尾到头打印链表及应用
发布日期:2021-10-02 06:27:33
浏览次数:2
分类:技术文章
本文共 2982 字,大约阅读时间需要 9 分钟。
文章目录
题目描述
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
解题思路
链表的遍历是从头节点开始的,而栈是先进后出的,因此我们可以将遍历到的数据先进行压栈操作,然后遍历完了之后我们进行出栈操作,则得到的结果就是我吗所需要的从尾到头打印链表的结果
C++求解
代码:
/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/class Solution { public: vector printListFromTailToHead(ListNode* head) { ListNode *temp; temp=head; stack s; vector res; while(temp){ s.push(temp->val); temp=temp->next; } while(!s.empty()){ res.push_back(s.top()); s.pop(); } return res; }};
运行时间:3ms占用内存:376k
拓展应用–两数相加
这类逆序的问题都可以用栈来解决,这里举一个两数相加的例子:
给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储 一位
数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8 原因:342 + 465 = 807解题代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { stack t1,t2,s1,s2,res; int carry=0,temp; while(l1){ t1.push(l1->val); l1=l1->next; } while(l2){ t2.push(l2->val); l2=l2->next; } while(!t1.empty()){ s1.push(t1.top()); t1.pop(); } while(!t2.empty()){ s2.push(t2.top()); t2.pop(); } while(!s1.empty()||!s2.empty()||carry){ if(!s1.empty()&&!s2.empty()){ temp=s1.top()+s2.top()+carry; if(temp>9){ carry=1; res.push(temp-10); }else{ carry=0; res.push(temp); } s1.pop(); s2.pop(); }else if(!s1.empty()){ temp=s1.top()+carry; if(temp>9){ carry=1; res.push(temp-10); }else{ carry=0; res.push(temp); } s1.pop(); }else if(!s2.empty()){ temp=s2.top()+carry; if(temp>9){ carry=1; res.push(temp-10); }else{ carry=0; res.push(temp); } s2.pop(); }else if(carry){ res.push(carry); carry=0; } } ListNode *head,*t,*ptr; head=NULL; while(!res.empty()){ ptr=new ListNode(res.top()); ptr->next=head; head=ptr; res.pop(); } return head; }};
这里只作为一个应用的例子讲解,并不是最优解法
转载地址:https://blog.csdn.net/Jeaten/article/details/107935354 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月10日 00时33分35秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
中文命名标识符如何区分类型和变量
2021-06-29
编程术语成系统中文化的意义
2021-06-29
草蟒 Python 中文 API 与 IDE 支持尝鲜
2021-06-29
一种改进中文 API 可读性的方法:参数不限于在末尾
2021-06-29
中文编程开发工具的生存模式探讨
2021-06-29
写给木兰编程语言研发团队的公开信
2021-06-29
为什么要急着为「木兰」编程语言贴上“造假”的标签?
2021-06-29
编程语言国产化的关键一战——对肆意污名化“木兰”编程语言说“不”
2021-06-29
各大媒体对「木兰」编程语言的不当言论盘点
2021-06-29
戳破针对「木兰」编程语言的拙劣谣言
2021-06-29
为「木兰」编程语言添加对中文命名标识符的支持
2021-06-29
悬赏万元,重现「木兰」编程语言编译器
2021-06-29
跳出编程语言本身看中文编程语言设计
2021-06-29
RPLY 入门例程中文化
2021-06-29
木兰编程语言入门教程之一——浅介
2021-06-29
木兰编程语言入门教程之二——控制走向
2021-06-29
基于「木兰」编译器,加十行代码实现 ∈ (属于集合)语法
2021-06-29
创建安卓键盘演示——“好不”
2021-06-29
木兰编程语言入门教程之三——函数和类型
2021-06-29
基于「木兰」逆向工程用 pyinstaller 生成可执行文件
2021-06-29