递归操作链表
来源:互联网 发布:tomcat运行php 编辑:程序博客网 时间:2024/06/07 15:42
/*
26/05/14修改。。。额。。N久之前增加了个递归逆置,,现在更新下。。
*/
代码。。。
/* 受昨天的二叉查找树启发而写的 纯粹练习递归而已=。= 个人感觉用递归来对链表进行操作用途不怎么大(就写起来比较容易。。) 在测试的数据达到5W多的时候 会出现栈溢出的情况*/#include <iostream>using namespace std;typedef struct Node{ int data; struct Node *next;}node, *listPtr;bool search(listPtr list, int key){ if(list) { if(list->data == key) return true; else return search(list->next, key); } return false;}void insert(listPtr *list, int key){ Node *tmp = NULL; if((*list) == NULL) { tmp = (node *)malloc(sizeof(node)); tmp->data = key; tmp->next = NULL; *list = tmp; } else if((*list)->data > key) insert(&(*list)->next, key); else if((*list)->data <= key) //这里感觉还能再简单一点。但不知道该怎么写 { tmp = (node *)malloc(sizeof(node)); tmp->data = key; tmp->next = *list; *list = tmp; }}bool deleteKey(listPtr *list, int key){ node *p = NULL; if(!(*list)) { return false; } else if((*list)->data == key) { p = *list; *list = (*list)->next; free(p); return true; } else return deleteKey(&(*list)->next, key);}listPtr reverse(listPtr *list, listPtr preNode){ listPtr tmp; if(*list) { tmp = (*list)->next; (*list)->next = preNode; return reverse(&tmp, *list); } else return preNode;}void traversal(listPtr list){ if(list) { cout << list->data << " "; traversal(list->next); }}int main(){ int i; node *list = NULL; //插入操作 for(i = 0; i < 10; ++i) insert(&list, i); insert(&list, 6); insert(&list, -1); traversal(list); cout << endl; //逆置 list = reverse(&list, NULL); traversal(list); cout << endl; //查找操作 cout << search(list, 6) << " " << search(list, 0) << " " << search(list, 9) << " " << search(list, -100) << endl; //删除操作 deleteKey(&list, -1); deleteKey(&list, 9); deleteKey(&list, 5); traversal(list); cout << endl; return 0;}
0 0
- 递归操作链表
- 递归运用于链表的操作
- 关于链表的递归操作
- 链表递归操作并求最大值
- 用递归实现对链表的基本操作
- 反转链表[递归,非递归]
- 反转链表(递归与非递归)
- 链表逆转(递归+非递归)
- 递归和非递归逆转链表
- 链表反转--递归与非递归
- 数据结构学习之单向链表的基本操作(非递归实现)
- 数据结构学习之双向循环链表的基本操作(非递归实现)
- 递归操作(未完成)
- 递归操作简介
- 理解递归操作
- 汉诺塔 递归输出操作
- T_Sql 处理递归操作
- 理解递归操作
- <META http-equiv=Content-Type content="text/html; charset=gb2312">
- 如何向Sliverlight里传参数
- 跨平台图表控件TeeChart从DAT或TEXT文件中导入数据详解
- ICCV 2013的人脸特征点检评测
- 最简单的delegate加event 实例
- 递归操作链表
- nginx 配置
- MQ的工作原理--特点:异步,不丢包
- 监控 Linux 性能的 18 个命令行工具
- CMS的发展趋向
- 如何配置IIS服务器使用的中间证书( 微软 KB954755)
- snmp 卸载
- inline函数讲解
- 使用Windows剪贴板API