【算法题】写一个递归版本的链表转置程序
来源:互联网 发布:unity 3d 教程知乎 编辑:程序博客网 时间:2024/06/03 18:38
链表的转置是一个很常见、很基础的数据结构题了,非递归的算法很简单,用三个临时指针在链表上循环一遍即可,不再赘述。递归算法也是比较简单的,但是如果思路不清晰估计也难一时半会儿写出来把。下面是递归版本的链表转置程序:
#include <iostream>using namespace std;typedef struct Node{ Node(int v, Node *ptr=NULL) : data(v), next(ptr) {} int data; Node *next;}sNode;//LB_c: 输出链表,head为链表头指针void outputList(sNode *head){ sNode *p = head; while (p != NULL) {cout << p->data << " -> ";p = p->next; } cout << "NULL" << endl;}//LB_c: 转置链表的递归方法实现sNode* reverseList(sNode *head){ //LB_c: 异常判断(NULL==head)结束条件(NULL==head->nex), // 即head为最后一个节点时,将该节点返回,即为转置链表的头节点。 if ( (NULL == head) || (NULL == head->next) )return head; //LB_c: 递归后续链表(即以head->next为首节点的链表) sNode *pNewHead = reverseList(head->next); //LB_c: 上一步执行完后,head->next为后续链表的末尾节点, //所以让head->next的next指向当前节点head head->next->next = head; //LB_c: 当前节点的next指向NULL head->next = NULL; //LB_c: 返回后续链表的头指针 return pNewHead;}int main(){ //LB_c: 创建链表 sNode n5(5); sNode n4(4, &n5); sNode n3(3, &n4); sNode n2(2, &n3); sNode n1(1, &n2); //LB_c: 输出原始链表 outputList(&n1); //LB_c: 调用转置函数 sNode *pNew = reverseList(&n1); //LB_c: 输出转置后的链表 outputList(pNew); return 0;}
- 【算法题】写一个递归版本的链表转置程序
- java写的一个递归程序
- 如何写一个递归程序
- 怎么写一个递归程序
- 用存储过程写的一个小递归程序
- 简单说明什么是递归,什么情况下会使用递归,并写一个简单的递归程序。
- 一天一个算法题-简单的-递归
- 一天一个算法题-简单的-递归
- 《Java程序》使用递归调用的方法,写一个能够将字符串倒叙输出的函数
- Treeview的一个递归算法
- 递归算法的一个例子
- 递归算法的一个例子
- 一个递归的经典算法
- 一个简单的递归算法
- 没有用递归,写了一个文本转成树的小程序,代码凑和看吧
- 打卡26:第一次写递归的程序
- 写一个简单的递归函数
- 如何写递归程序 以及 递归和栈的联系
- mybatis resultmap
- shell 学习笔记1
- 基于XMPP协议的简单IM实现(iOS)(含Demo)
- 在windows下的QT编程中char*与QString之间的转换
- NetAPP proposed File service for OpenStack
- 【算法题】写一个递归版本的链表转置程序
- Java Map三种遍历小例子
- linux 高级编程
- 再谈手机刷机
- 第七篇:tuple(元组)
- 网页的栅格系统设计
- 也谈SDH、MSTP、OTN和PTN的区别和联系
- 解决mysql的“Access denied for user ‘root’@'localhost’”
- 设计优秀API的五大规则