【问题标题】:Link List Reverse Recursive Function Not Working链接列表反向递归函数不起作用
【发布时间】:2019-07-30 13:22:43
【问题描述】:

我无法弄清楚为什么我的递归函数不起作用。每次我运行代码时,链表都不会反向打印。

typedef struct numberline NUMBERLINE; 
NUMBERLINE * startptr;
NUMBERLINE * newptr;
NUMBERLINE * curptr;

NUMBERLINE *revRecursive(NUMBERLINE *curptr)
{

    NUMBERLINE *q, *head;

    if(curptr->next == NULL)
    {
        return curptr;
    }

    head = curptr;

    q = curptr = revRecursive(curptr);

    while(q->next != NULL)
    {
        q = q->next;
    q->next = head;
    head->next = NULL;

    return curptr;
    }
}

也许我在参数中使用了错误的指针,或者我没有正确实现我不确定。

【问题讨论】:

  • @mjwills 哦,哎呀标签错误
  • 时间到learn how to debug your program。一个快速的rubber duck debugging 应该足以找到问题(特别是如果您一致地缩进代码)。
  • 您面临的问题是什么?发布有关正在传递的输入和程序输出的更多信息
  • 您的橡皮鸭调试会话应该帮助您自己阐明函数的用途、前置条件和后置条件,包括参数和返回值的重要性。不要浪费:将这些详细信息记录在与函数相关的文档注释中,即使只是为了您自己的未来利益。
  • 您的代码不包含任何打印任何内容的方法

标签: c list recursion reverse singly-linked-list


【解决方案1】:

函数可以如下所示

NUMBERLINE * reverse( NUMBERLINE *head ) 
{ 
    if ( head && head->next ) 
    { 
        NUMBERLINE *current = head; 
        head = head->next; 
        head = reverse( head ); 
        current->next->next = current; 
        current->next = NULL; 
    }

    return head;
} 

至于你的函数定义,那么甚至这个语句

if(curptr->next == NULL)
{
    return curptr;
}

curptr 等于NULL 时出现未定义的行为。

【讨论】:

    猜你喜欢
    • 2013-06-02
    • 2012-01-18
    • 1970-01-01
    • 2014-07-30
    • 2011-12-19
    • 2013-03-04
    • 1970-01-01
    相关资源
    最近更新 更多