资讯专栏INFORMATION COLUMN

剑指offer系列——剑指 Offer 06. 从尾到头打印链表(C语言)

DevTTL / 2847人阅读

摘要:导航小助手剑指从尾到头打印链表题目详情解题思路源代码总结剑指从尾到头打印链表题目详情输入一个链表的头节点,从尾到头反过来返回每个节点的值用数组返回。时间复杂度方法先反转链表并求长度,在将反转后的链表数据拷贝至数组中。

⭐️前面的话⭐️

大家好!博主开辟了一个新的专栏——剑指offer,我要开始刷题了!这个专栏会介绍《剑指offer》书上所有的面试编程题。并且会分享一些我的刷题心得。由于博主水平有限,如有错误,欢迎指正,如果有更好的解题思路和算法可以分享给博主哦!一起加油!一起努力!

?博客主页:未见花闻的博客主页
?欢迎关注?点赞?收藏⭐️留言?
?本文由未见花闻原创,CSDN首发!
?首发时间:?2021年9月3日?
✉️坚持和努力一定能换来诗与远方!
?参考书籍:?《剑指offer第1版》,?《剑指offer第2版》
?参考在线编程网站:?牛客网?力扣
?作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!
博主的码云gitee,平常博主写的程序代码都在里面。


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

?题目详情

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

示例:

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

限制:

0 <= 链表长度 <= 10000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/

?解题思路

方法1: 先求链表长度,然后再将链表中的元素逆序存入数组中。

时间复杂度: O(N)

方法2: 先反转链表并求长度,在将反转后的链表数据拷贝至数组中。
反转链表方法见剑指offer系列——剑指 Offer 24. 反转链表(C语言)

时间复杂度: O(N)

?源代码

编程语言:C语言
在线编程平台:力扣

//方法1/** * 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){    int cnt = 0;    struct ListNode* cur = NULL;    cur = head;    while(cur)    {        cnt++;        cur = cur->next;//求链表中元素个数    }    int* arr = (int*)malloc(sizeof(int)*cnt);//分配给数组合适的空间    *returnSize = cnt;    cur = head;    while(cur)    {        *(arr + cnt - 1) = cur->val;//将链表的元素逆向存入数组中        cur = cur->next;        cnt--;    }    return arr;}
//方法2int* reversePrint(struct ListNode* head, int* returnSize){    if (head == NULL)    {        *returnSize = 0;        return NULL;    }    int cnt = 0;//记录元素个数    struct ListNode* cur = head;    struct ListNode* next = NULL;    struct ListNode* tail = NULL;    while (cur)    {        next = cur->next;        cur->next = tail;        tail = cur;        cur = next;        cnt++;    }//反转链表并求链表长度    int* arr = (int*)malloc(sizeof(int)*cnt);    *returnSize = cnt;    cur = tail;    int i = 0;    for (i = 0; i < cnt; i++)    {        arr[i] = cur->val;        cur = cur->next;    }    return arr;}

?总结

对于链表的逆序打印,可以先统计链表元素个数,然后根据链表元素个数创建合适大小的数组,最后再将链表中的元素逆序存入数组中!还可以先进行反转链表并求出链表元素个数,同理根据链表大小为数组申请空间,最后将反转链表中的元素存入数组中!

觉得文章写得不错的老铁们,点赞评论关注走一波!谢谢啦!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/119110.html

相关文章

  • #yyds干货盘点#剑指 Offer 06. 从尾到头打印链表

    摘要:题目输入一个链表的头节点,从尾到头反过来返回每个节点的值用数组返回。 题目输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0

    SQC 评论0 收藏0
  • 剑指offer】3.从尾到头打印链表

    摘要:题目描述输入一个链表,按链表值从尾到头的顺序返回一个。最后别忘了,从尾到头遍历链表,不要忘了将你的结果进行翻转。 题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。 分析 要了解链表的数据结构: val属性存储当前的值,next属性存储下一个节点的引用。 要遍历链表就是不断找到当前节点的next节点,当next节点是null时,说明是最后一个节点,停止遍历。 最...

    graf 评论0 收藏0
  • 剑指offer【6】:从尾到头打印链表

    题目 输入一个链表的头节点,从尾到头反过来打印出每个节点的值。 解题思路 一、栈 第一个遍历的节点最后一个输出,而最后一个比遍历到的节点第一个输出(后进先) public static ArrayList printListFromTailToHead(ListNode listNode){ ArrayList list = new ArrayList(); ...

    Kahn 评论0 收藏0
  • PHPer也刷《剑指Offer》之链表

    摘要:剑指中链表相关题目俗话说光说不练假把式,既然学习了链表的基础概念和基本操作那我们一定要找些题目巩固下,下面来看剑指中的相关题目。题目分析合并两个排序的链表,需要分别比较两个链表的每个值,然后改变指针。 温故知新 链表由一个一个的作为节点的对象构成的,每一个节点都有指向下一个节点的指针,最后一个节点的指针域指向空。每个节点可以存储任何数据类型。 根据类型可以分为单链表、双链表、环形链表、...

    daydream 评论0 收藏0
  • 利用PHP实现《剑指 offer》之链表(数据结构与算法实战 )

    摘要:一定要认真看分析注释题目要求题目描述输入一个链表,从尾到头打印链表每个节点的值。分析因为链表只有知道当前结点才能知道下一结点,所以不可能直接从后往前打印。 一定要认真看 分析 | 注释 | 题目要求 Question 1 题目描述:输入一个链表,从尾到头打印链表每个节点的值。 分析:因为链表只有知道当前结点才能知道下一结点,所以不可能直接从后往前打印。这种逆序的算法(策略)我们常用栈这...

    hiYoHoo 评论0 收藏0

发表评论

0条评论

DevTTL

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<