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

⭐️前面的话⭐️

大家好!博主开辟了一个新的专栏——剑指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;
}
//方法2
int* 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;
}

🌱总结

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

觉得文章写得不错的老铁们,点赞评论关注走一波!谢谢啦!
  • 29
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未见花闻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值