【问题标题】:I don't know how it works?我不知道它是如何工作的?
【发布时间】:2019-06-27 09:05:46
【问题描述】:

开始指向后面链表的第一个节点的下面函数的输出是什么?

1->2->3->4->5->6

void fun(struct node* start) 
{ 

  if(start == NULL) 

    return; 

  printf("%d  ", start->data);  



  if(start->next != NULL ) 

    fun(start->next->next); 

  printf("%d  ", start->data); 
} 

【问题讨论】:

  • 你认为输出是什么,为什么?注意打印和递归调用的顺序。
  • 为什么不自己运行一下看看它提供的输出?
  • 您可以使用IdeoneOnlineGDB 来测试代码。如果您有具体问题,例如编写 main(),请特别提出。
  • 回答这个问题的方法是像电脑一样,但在纸上。写下最初的清单。开始追踪代码。当你到达printf 语句时,写下你认为会输出的内容。当遇到递归调用时,将当前位置和值添加到堆栈中。当遇到函数返回时,从堆栈中弹出。这个练习是一个测试,看看你是否理解递归的工作原理。
  • 一个好的开始是使用一个只有一个节点的列表。然后一个有两个节点。然后一个具有三个节点。模拟计算机的操作。

标签: c data-structures linked-list


【解决方案1】:

作为一名新的贡献者,我将让您休息一下,并提供创建链接列表的代码,以及 Blaze 建议的修改。我在 C 方面并不太快,所以可能有更好的实现。希望这会对您和/或其他人有所帮助。

#include "stdio.h"
#include "malloc.h"

struct node {
    int data;
    node* nextNode;
};

void fun(struct node* start)
{

    printf("%d", start->data);        //  <===  this needs to be first
    if (start->nextNode == NULL) {
        return;
    }
    printf("->");
    fun(start->nextNode);
}

node* findLastNode(struct node* previousNode)
{

    if (previousNode->nextNode == NULL) {
        return previousNode;
    }
    findLastNode(previousNode->nextNode);
}

void addNode(node* firstNode, int data)
{
    node* lastNode = NULL;
    node* nodePtr;

    nodePtr = (node*)malloc(sizeof(node));
    nodePtr->data = data;
    nodePtr->nextNode = NULL;

    if (firstNode->nextNode == NULL) {
        firstNode->nextNode = nodePtr;
    }
    else {
        lastNode = findLastNode(firstNode);
        lastNode->nextNode = nodePtr;
    }

}

int main()
{
    node firstNode;

    firstNode.nextNode = NULL;
    addNode(&firstNode, 1);
    addNode(&firstNode, 2);
    addNode(&firstNode, 3);
    addNode(&firstNode, 4);
    addNode(&firstNode, 5);
    addNode(&firstNode, 6);

    fun(firstNode.nextNode);
    printf("\n");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-22
    • 2023-03-29
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    相关资源
    最近更新 更多