C 如何将递归语句更改为while循环语句(即迭代语句)
我在研究一个链表代码时发现,除了使用递归外,还可以使用for或while循环。因此,我尝试将递归转换为while循环(即迭代),但我的逻辑似乎完全不合适 我只想在下面的代码中更改C 如何将递归语句更改为while循环语句(即迭代语句),c,recursion,while-loop,linked-list,singly-linked-list,C,Recursion,While Loop,Linked List,Singly Linked List,我在研究一个链表代码时发现,除了使用递归外,还可以使用for或while循环。因此,我尝试将递归转换为while循环(即迭代),但我的逻辑似乎完全不合适 我只想在下面的代码中更改列表函数。你能帮我一下吗 递归代码如下所示(这是具有我想要的结果的代码): 我真的为此挣扎了好几个小时。。。请您帮助我如何更改它以获得相同的结果?尝试以下方法: NODE listing(char string[]){ NODE head; head = (struct linkedlist *)mal
列表
函数。你能帮我一下吗
递归代码如下所示(这是具有我想要的结果的代码):
我真的为此挣扎了好几个小时。。。请您帮助我如何更改它以获得相同的结果?尝试以下方法:
NODE listing(char string[]){
NODE head;
head = (struct linkedlist *)malloc(sizeof(linkedlist));
NODE cur = head;
int i = 0;
while(string[i] != '\0')
{
cur->first = string[i];
if (string[i+1] != '\0') cur->second = (struct linkedlist *)malloc(sizeof(linkedlist));
else cur->second = NULL;
cur = cur->second;
i++;
}
return head;
}
int main(void){
char in_string[10] = {0};
memcpy(in_string, "trial", 5);
NODE head = listing(in_string);
print(head); //==> t -> r -> i -> a -> l -> NULL
return 0;
}
使用while循环定义非递归函数非常简单
NODE listing( const char string[] )
{
NODE head = NULL;
NODE *current = &head;
while ( *string )
{
*current = ( struct linkedlist * )malloc( sizeof( linkedlist ) );
( *current ) -> first = *string++;
( *current ) -> second = NULL;
current = &( *current )->second;
}
return head;
}
请注意,对这样的指针使用typedef
typedef linkedlist *NODE;
这不是个好主意。它只会让代码的读者感到困惑。在迭代函数的任何地方,你都不会分配到
second
,你希望它如何工作?
NODE listing( const char string[] )
{
NODE head = NULL;
NODE *current = &head;
while ( *string )
{
*current = ( struct linkedlist * )malloc( sizeof( linkedlist ) );
( *current ) -> first = *string++;
( *current ) -> second = NULL;
current = &( *current )->second;
}
return head;
}
typedef linkedlist *NODE;