【发布时间】:2021-03-07 04:04:06
【问题描述】:
我正在研究一个链表代码,发现除了使用递归之外,还可以使用 for 或 while 循环。因此,我尝试将递归更改为 while 循环(即迭代),但似乎我的逻辑完全不合适..
我只想更改以下代码中的listing 函数。你能帮帮我吗?
递归代码如下(这是我想要的结果的代码):
#include <stdio.h>
#include <stdlib.h>
typedef struct linkedlist{
char first;
struct linkedlist *second;
}linkedlist;
typedef linkedlist *NODE;
NODE listing(char string[]){ //This is the function that needs to change using a loop.
NODE head;
if(string[0] == '\0')
return NULL;
else{
head = (struct linkedlist *)malloc(sizeof(linkedlist));
head -> first = string[0];
head -> second = listing(string + 1);
return head;
}
}
void print(NODE head){
if(head == NULL)
printf("NULL\n");
else{
printf("%c -> ", head -> first);
print(head -> second);
}
}
int main(void){
char in_string[10];
NODE head;
printf("insert a string : ");
scanf("%s", in_string);
head = listing(in_string);
printf("result of the list...\n");
print(head);
return 0;
}
递归代码的结果是,如果我输入trial,它会给我t -> r -> i -> a -> l -> NULL的结果。
我尝试更改并最终导致错误的代码如下:
NODE listing(char string[]){
NODE head;
int i = 0;
while(1){
if(string[i] == '\0'){
return NULL;
}
else{
head = (struct linkedlist *)malloc(sizeof(ELEMENT));
head -> first = string[i];
i++;
return head;
}
}
}
我真的为此苦苦挣扎了好几个小时...请你帮我改一下,这样我得到相同的结果吗?
【问题讨论】:
-
您从未在迭代函数中的任何位置指定
second,您希望它如何工作?
标签: c recursion while-loop linked-list singly-linked-list