递归操作链表

来源:互联网 发布: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
原创粉丝点击