持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第18天,点击查看活动详情
剑指 Offer 06. 从尾到头打印链表
一、题目描述:
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2] 输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000
来源:力扣(LeetCode) 链接:leetcode.cn/problems/co… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、思路分析:
这部分可以写写:
-
这道题考察了什么思想?你的思路是什么?
逆序遍历链表,我们可以顺序遍历链表,使用一个栈保存遍历结果,顺序遍历每次都压入栈。然后再将栈内数据全部弹出即可。
还有一种方法,哈哈哈这种方法比较恶心:
1、遍历一遍链表,将所有元素保存在数组中 2、反转数组即可
-
做题的时候是不是一次通过的,遇到了什么问题,需要注意什么细节?
是一次通过的,该题目只需要我们有思路即可。
-
有几种解法,哪种解法时间复杂度最低,哪种解法空间复杂度最低,最优解法是什么?其他人的题解是什么,谁的效率更好一些?用不同语言实现的话,哪个语言速度最快?
还有递归方法逆序打印链表。
class Solution: def reversePrint(self, head: ListNode) -> List[int]: return self.reversePrint(head.next) + [head.val] if head else [] 作者:jyd 链接:https://leetcode.cn/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/solution/mian-shi-ti-06-cong-wei-dao-tou-da-yin-lian-biao-d/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
三、AC 代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* reversePrint(struct ListNode* head, int* returnSize){
*returnSize=0;
if(head==NULL)
return NULL;
int stack[10001];
int top=-1;
while(head)
{
stack[++top]=head->val;
head=head->next;
}
int* res=(int*)malloc(sizeof(int)*(top+1));
while(top!=-1)
res[(*returnSize)++]=stack[top--];
return res;
}
四、总结:
如果你还有更多的思考、分析、总结,通通都加上来吧~
剑指 Offer 06. 从尾到头打印链表
剑指 Offer,让我们一起向着大厂Offer前进吧,我是小伞,一名刚毕业的菜菜女程序员,让我们一起努力!!!