Reverse链表 递归实现

#include<iostream>

struct node{
  int payload;
  node* next;
};
void bianli(node* head){
  node* iterator = head;
  while(iterator){
    std::cout << iterator->payload<<" ";
    iterator = iterator->next;
  }
  std::cout<<" "<<std::endl;
}

node* diguifunc(node* head){
    if(head==nullptr|| head->next==nullptr)
        return head;

    node* second = head->next;
    node* new_head = diguifunc(second);
    second->next = head;
    head->next = nullptr;
    return new_head;
}

int main(){
    node* head = nullptr;
    for(int i=0;i<10;i++){
        node* new_node = new node;
        new_node->payload = i*10;
        new_node->next=head;
        head = new_node;
    }
    head = diguifunc(head);
    bianli(head);

    system("pause");
    return 0;
}
时间: 2024-10-20 06:13:29

Reverse链表 递归实现的相关文章

最全C 语言常用算法详解-排序-队列-堆栈-链表-递归-树

具体 源代码 案例查看github,持续更新中............ github地址:https://github.com/Master-fd/C-Algorithm 1. 二分法查找 2. 冒泡排序 3. 插入排序 4. 希尔排序 5. 选择排序 6. 快速排序 7. 单链表实现堆栈 8. 单链表实现队列 9. 普通单链表 10. 递归实现斐波拉契数列 11. 递归实现strlen 12. 循环链表 13. 求素数 14. 双向链表 15. 顺序表实现队列 16. 顺序表实现栈 17. 顺

C++单链表递归逆序

#include <iostream> using namespace std; struct Node { int data; Node *next; Node(int d = int()) :data(d), next(NULL){} }; class List { public: List() { first = NULL; } void Insert(int a[], int n) { Node *p = first; for (int i = 0; i < n; i++) {

[模板]洛谷T3369 普通平衡树 链表&amp;递归版、无父指针版Splay

结构体node定义:呐...因为不是Treap,所以就不必定义优先级yx了: 这次为了代码简短,总算是把判断子树方向函数(cmp)和节点信息维护函数(maintain)封在了结构体里. 旋转函数rotate:与Treap相比,没有任何变化,就是写得简短了一些. 插入函数insert:Treap时需要对违反堆性质的节点进行上浮的操作现在不需要了,只需同普通BST一样直接插入即可. 插完后,对刚插入的节点执行Splay操作. 删除函数del:针对待删除节点左右子树均非空的情况,Treap做法是将左右

[模板]洛谷T3391 文艺平衡树 链表&amp;递归版、无父指针版Splay

指针大法好 无父指针Splay大法好 大佬们的"改变旋转方向"萌新表示不懂,于是就自己乱搞出了下面的搞法... 代码如下,萌新写的丑,诸位大佬见谅QwQ~ 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<ctime> 5 #include<cstdlib> 6 #include<ctime> 7 8 #include<

链表 | 递归删除不带头结点链表所有x元素

王道P37 T1 : 设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点. 王道上的答案绝对是错的,我自己想了一个 函数主体 LinkList* del_x(LinkList* prior,LinkList* L,int x){ if(L==NULL) return NULL; if(L->data==x){ if(prior==NULL){ LinkList* ans=L->next; delete L; if(ans!=NULL) ans=del_x(NULL,ans,x); /

LeetCode 21. 合并两个有序链表(C#实现)——链表,递归,迭代

迭代:设定哨兵节点head,维护一个prev指针,每次迭代都是调整prev的next指针,判断两个链表头元素大小,将小的值接入prev节点后面,同时将接入的链表和prev后 原文地址:https://www.cnblogs.com/jhgfdm/p/12274290.html

排序两个排序的链表----递归非递归实现

ListNode* Merge1(ListNode* pHead1, ListNode* pHead2) { if(pHead1 == NULL) return pHead2; else if(pHead2 == NULL) return pHead1; ListNode* pMergedHead = NULL; if(pHead1->m_nValue < pHead2->m_nValue) { pMergedHead = pHead1; pMergedHead->m_pNext

不带头结点的单链表递归删除元素为X的结点

关于php时区时间错误问题 date 当前时间 时差 当地 本地date_default_timezone_set 之前有一个遗留问题,就是echo date("y-m-d h:i:s",time())回来的时间总是与实际时间对不上,今天终于在网上找到了原因和解决方法,分享如下: 我补充一点,我按照下面提示的方法修改php.ini找不到date.timezone 这行,是不是就没办法了呢,当然不是啦,哈哈没有的话就自己加嘛,自己动手丰衣足食.我加了这样一句date.timezone =

List链表模板类的简单实现(部分方法递归操作)

善哉. 此篇博客,旨在剖析下操作单链表时的递归思想.望各位施主笑纳. 1. 递归删除结点 * 空链表 - 直接返回 * 非空,若未找到待删除元素,递归.若找到,删除节点,返回尾链头 * 回溯,衔接形成新链 1 _Node* myErase_R(const Object& elem, _Node* curr){ 2 //空链 或 无此元素 3 if (curr == NULL) return NULL; 4 5 if (curr->elem == elem){ 6 _Node* tmp = c