剑指 Offer 06. 从尾到头打印链表

95 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第18天,点击查看活动详情

剑指 Offer 06. 从尾到头打印链表

一、题目描述:

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。

示例 1:

输入:head = [1,3,2] 输出:[2,3,1]

限制:

0 <= 链表长度 <= 10000

来源:力扣(LeetCode) 链接:leetcode.cn/problems/co… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

这部分可以写写:

  1. 这道题考察了什么思想?你的思路是什么?

    逆序遍历链表,我们可以顺序遍历链表,使用一个栈保存遍历结果,顺序遍历每次都压入栈。然后再将栈内数据全部弹出即可。

    还有一种方法,哈哈哈这种方法比较恶心:

    1、遍历一遍链表,将所有元素保存在数组中 2、反转数组即可

  2. 做题的时候是不是一次通过的,遇到了什么问题,需要注意什么细节?

    是一次通过的,该题目只需要我们有思路即可。

  3. 有几种解法,哪种解法时间复杂度最低,哪种解法空间复杂度最低,最优解法是什么?其他人的题解是什么,谁的效率更好一些?用不同语言实现的话,哪个语言速度最快?

    还有递归方法逆序打印链表。

    image-20220615175834822

     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前进吧,我是小伞,一名刚毕业的菜菜女程序员,让我们一起努力!!!