当前位置: 首页 > Linux

每日练习(三):从头到尾打印链表

时间:2023-04-06 22:58:41 Linux

title:每日练习(三):从头到尾打印链表categories:[健智报价]tags:[每日练习]date:2022/01/14日常练习(三):从头到尾打印链表输入一个链表的头节点,返回从尾到头每个节点的值(返回数组)。示例1:输入:head=[1,3,2]输出:[2,3,1]限制:0<=链表长度<=10000来源:LeetCode链接:https://leetcode-cn。com/probl...方法一:逆向算法流程遍历:遍历一次得到链表的大小,再遍历,将数据插入到arr容器中/***单向链表的定义。*结构列表节点{*intval;*列表节点*下一个;*ListNode(intx):val(x),next(NULL){}*};*/classSolution{public:vectorreversePrint(ListNode*head){intlen=0;列表节点*node=head;while(node!=NULL){len++;//获取数据的长度node=node->next;}向量arr;列表节点*p=头;for(inti=0;ival);//插入倒置p=p->next;}返回arr;}};方法二:使用栈先进后出算法流程:入栈:遍历链表,将每个节点的值入栈。出栈:将每个节点值出栈,存入数组并返回。复杂度分析:时间复杂度O(N):入栈和出栈一共使用O(N)的时间。空间复杂度O(N):辅助栈stack和数组res使用额外空间O(N)。/***单链表的定义。*结构列表节点{*intval;*列表节点*下一个;*ListNode(intx):val(x),next(NULL){}*};*/classSolution{public:vectorreversePrint(ListNode*head){stacks;矢量资源;列表节点*p=头;while(p!=NULL){s.push(p->val);//节点数据依次入栈p=p->next;}while(!s.empty())//遍历栈{res.push_back(s.top());//反转s.pop();}返回资源;}};