美文网首页
分治法逆序打印一条链表的递归函数写法

分治法逆序打印一条链表的递归函数写法

作者: sakura579 | 来源:发表于2020-08-28 08:50 被阅读0次
#include <iostream>
#include <cstdlib>
using namespace std;

typedef struct Lnode{
    int data;
    Lnode *next; 
}; 

void reprint(Lnode *L)
{
    if(L!=NULL){
        reprint(L->next);
        cout<<L->data<<'\t';
    }
}


int main(){
    Lnode *head,*q,*p,*r;
    p=(Lnode *)malloc(sizeof(Lnode));
    head = p;
    p->data = 3;
    q=(Lnode *)malloc(sizeof(Lnode));
    q->data = 4;
    r==(Lnode *)malloc(sizeof(Lnode));
    r->data = 5;
    r->next = NULL;
    q->next = r;
    p->next = q;
    reprint(head);
}
 
 

编译通过 执行失败
不知道为啥

#include <iostream>
#include <cstdlib>
using namespace std;

typedef struct Lnode{
    int data;
    Lnode *next; 
}; 

void reprint(Lnode *L)
{
    if(L!=NULL){
        reprint(L->next);
        cout<<L->data<<'\t';
    }
}
void createLinkListR(Lnode *&head){
    head = (Lnode *)malloc(sizeof(Lnode));
    head->next = NULL;
    Lnode *p = NULL,*r = head;
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        p = (Lnode *)malloc(sizeof(Lnode));
        p->next = NULL;
        
        cin>>p->data;
        p->next = r->next;
        r->next = p;
        r = p;
        
    }
}

int main(){
    Lnode *head;
    createLinkListR(head);
    reprint(head);
}
 

结果
5(输入)
1 2 3 4 5(输入)
5 4 3 2 1 1710608(输出)

就假设reprint是可以逆序打印链表
reprint(L->next);
把链表分为两部分
一部分是开始结点 一部分是剩余结点

时间复杂度是O(n)(打印了n个结点)
空间复杂度是O(n)(递归函数展开 需要保护现场有n处 系统占的深处是n)

相关文章

  • 分治法逆序打印一条链表的递归函数写法

    编译通过 执行失败不知道为啥 结果5(输入)1 2 3 4 5(输入)5 4 3 ...

  • leetcode-合并K个排序链表

    思路: 首先解决两个链表的合并: 利用分治法解决K个链表的排序: 如果使用非递归版本的分治法,可以这样做:

  • 单链表 常用操作(golang)

    (单链表备忘记录)知识点: 单链表结构 创建链表方法头插法创建尾插法创建 遍历链表 逆序反转链表迭代递归头插法就地...

  • 学习面试题-阿里篇

    1.如何实现一个高效的单向链表逆序输出? 递归与非递归方式 二分法,牛顿迭代法已知 sqrt(2)约等于 1.41...

  • 分治策略

    求解递归式方法 最大子数组问题 分治策略 分治法流程 伪代码 C++实现 线性解 流程 代入法求解递归式 递归树法...

  • 剑指offer学习笔记:4.4 分解让复杂问题简单化

    分治法,分而治之。 面试题26:复杂链表的复制请实现函数ComplexListNode* Clone(Comple...

  • leetcode 单链表的各种算法

    1 递归实现:合并两个有序的单链表 2 递归实现:单链表逆序存入vector 3 循环实现:快慢指针找到单链表中间...

  • 2.单链表

    该部分包含以下内容-单链表的增删改查-计算链表长度-逆序链表-寻找(删除)链表倒数第K个元素-逆序打印链表(使用栈)

  • 链表逆序的递归实现

    链表逆序是个很基础的算法,考察的是指针操作和基本数据结构。常规的写法当然是OK的,不过要是还会写出一个递归的链表逆...

  • Python 快速排序+Partition()函数 Leetco

    首先是最经典的Partion函数分治思想与快速排序的经典写法: 快递排序递归部分,只要left

网友评论

      本文标题:分治法逆序打印一条链表的递归函数写法

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