美文网首页
[好题]剑指offer 6# 链表逆序输出

[好题]剑指offer 6# 链表逆序输出

作者: 再凌 | 来源:发表于2020-04-28 19:40 被阅读0次

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

C++

  1. 先放入vector中, 再调用reverse算法. 原地方法
  2. 开辟一个stack, 然后在放入vector中. 时间复杂度O(n), 空间复杂度n
  3. 递归法放入. 时间复杂度n, 空间复杂度
  4. 改变链表结构

需要根据面试官的需要选择不同的算法


有三种解法:

  1. 扫描链表,得到长度后创建数组, 按顺序放入数组后原地翻转(n + n + n/2)
  2. 扫描链表, 得到长度后创建数组, 倒序放入数组(n + n + n)
  3. 原地翻转链表, 同时得到长度, 创建数组并放入.(n + n)(本人方法)
然而方法三看似扫描次数最少, 但是可能操作最复杂吧, 时间属于中游水平 时间
/**
 * 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){

    if(head == NULL){ *returnSize = 0; return NULL;}
    if(head->next == NULL) {int *result = malloc(sizeof(int)); *result = head->val;*returnSize = 1;return result;}
    
    *returnSize = 1;
    struct ListNode *p1 = head, *p2 = p1->next, *p3;
    p1->next = NULL;
    while(p2)
    {
        p3 = p2->next;
        p2->next = p1;
        p1 = p2;
        p2 = p3;
        *returnSize += 1;
    } 
    int *result = (int*)malloc(sizeof(int) * (*returnSize));
    for(int i = 0; i<*returnSize; i++)
    {
        result[i] = p1->val;
        p1 = p1->next;
    }

    return result;
}

相关文章

  • [好题]剑指offer 6# 链表逆序输出

    输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 C++ 先放入vector中, 再调用rev...

  • 反转链表

    《剑指offer》刷题笔记。如有更好解法,欢迎留言。 关键字:链表 题目描述: 输入一个链表,反转链表后,输出新链...

  • 合并两个排序的链表

    《剑指offer》刷题笔记。如有更好解法,欢迎留言。 关键字:链表 题目描述: 输入两个单调递增的链表,输出两个链...

  • 链表中倒数第k个结点

    《剑指offer》刷题笔记。如有更好解法,欢迎留言。 关键字:栈 题目描述: 输入一个链表,输出该链表中倒数第k个...

  • 全网最全剑指offer题目解答

    【剑指offer】Java版代码(完整版) 【剑指offer】1-10题 【剑指offer】11-20题 【剑指o...

  • LeetCode算法题及优秀解答精选

    0.知识点全解 笔试面试知识整理-知识共享 <剑指offer> 1. LeetCode分类解题 单链表逆序 从排序...

  • ARTS 20201208-1215

    Algorithm: 每周至少做一个 LeetCode 的算法题算法题:1 剑指 offer 24: 翻转链表递归...

  • 面试 18:复杂链表的复制(剑指 Offer 第 26 题)

    面试 18:复杂链表的复制(剑指 Offer 第 26 题) 在上一篇推文中,我们留下的习题是来自《剑指 Offe...

  • 反转链表

    《剑指offer》面试题24:输入一个链表,反转链表后,输出新链表的表头。 思路:反转链表就是将链表中每一个节点的...

  • Day3 剑指offer:逆序链表

    输入一个链表,从尾到头打印链表每个节点的值。

网友评论

      本文标题:[好题]剑指offer 6# 链表逆序输出

      本文链接:https://www.haomeiwen.com/subject/bzibwhtx.html