| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 644 人关注过本帖
标题:用递归方法反转链表的问题
取消只看楼主 加入收藏
neverlandzzy
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2011-3-26
结帖率:100%
收藏
 问题点数:0 回复次数:0 
用递归方法反转链表的问题
尝试用迭代和递归两种方法实现链表反转。全部代码如下。
迭代方法void iterative_reverse() 经测试没有问题,
但递归方法 mylist* recursive_reverse(mylist* root)
一运行就死循环,不知道问题在哪里,求高手指教~
 
谢谢
程序代码:
#include<stdio.h>
#include<stdlib.h>

typedef struct list
{
    int node;
    struct list *next;
}mylist;

mylist *head;

mylist* create_node(int node_number)
{
    mylist *p;
   
    p = (mylist*)malloc(sizeof(mylist));

    if (p == NULL)
    {
        printf("No enough memory!");
    }

    p->node = 10*node_number;
    p->next = NULL;

    printf("\nA new node created.");

    return p;
   
}

void disp_list(mylist *head)
{
    mylist *p;
    int j=0;

    p=head;
   
    do{
        printf("\n%5d%10d", j,p->node);
        j++;
        p=p->next;
    }while(p!=NULL);

}

void iterative_reverse()
{
    mylist *p, *q, *r;

    p = head;
    q = p-> next;
    p->next = NULL;

    while(q!= NULL)
    {
        r = q->next;
        q->next = p;
        p = q;
        q = r;
    }

    head = p;
}

mylist* recursive_reverse(mylist* root) // 本函数有问题
{
    if(root->next!=NULL)
    {
        recursive_reverse(root->next);
        root->next->next=root;
        return root;
    }
    else
    {
        head = root;
        return root;
       
    }
}



main()
{
    int i = 0;
    mylist *pr;
    char ctrl;

    while(1)
    {
        printf("\nPress 'i' to insert one new node!");
        ctrl=getch();
    
        if(ctrl!='q'&&ctrl!='i')
            continue;
        if(ctrl=='q')
            break;
        if(i==0)
        {
            head=create_node(i);
            pr=head;
        }
        else
        {
            pr->next=create_node(i);
            pr=pr->next;
        }

        i++;
    }

    disp_list(head);

    iterative_reverse();

    printf("\nAfter Reverse");

    disp_list(head);

    head = recursive_reverse(head);

    printf("\nAfter 2nd Reverse");

    disp_list(head);

    system("pause");

}






 



[ 本帖最后由 neverlandzzy 于 2011-4-4 10:56 编辑 ]
搜索更多相关主题的帖子: 测试 
2011-04-04 10:54
快速回复:用递归方法反转链表的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021422 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved