gpt4 book ai didi

c - c中的链表遍历

转载 作者:太空宇宙 更新时间:2023-11-04 07:20:13 25 4
gpt4 key购买 nike

main 函数中,我用 n = 50 和 next = NULL 创建了一个节点。当我添加一个10到链表中时,虽然已经添加了,但是遍历的时候并没有显示出来。发生这种情况的原因是因为在调用 add 函数时,指向 50 节点的 start 指针没有更新为指向 10 的新节点。 (第 28 行到第 34 行)。

#include <stdio.h>    
#include <stdlib.h>

typedef struct node
{
int n;
struct node* next;
} node;

void traverse(node* start)
{
while(true)
{
printf("%i\n",start->n);
start = start->next;
if(start == NULL)
{
break;
}
}
}

void add(int num, node* start)
{
node* previous = NULL;
node* current = start;
if(num<current->n)
{
//------------------------------------------------------------------------------

//The problem is inside this if block.
node* tmp = malloc(sizeof(node));
tmp->next = current;
current = tmp;
//-------------------------------------------------------------------------------

}
else
{
while(true)
{
previous = current;
current = current->next;
if(current == NULL)
{
node *tmp = malloc(sizeof(node));
tmp->n = num;
tmp->next = NULL;
previous->next = tmp;
break;
}
else
{
if(current->n > num)
{
node *tmp = malloc(sizeof(node));
tmp->n = num;
tmp->next = current;
previous->next = tmp;
break;
}
}
}
}
}
int main(void)
{
node* start = malloc(sizeof(node));
start->n = 50;
start->next = NULL;
add(10,start);
traverse(start);
}

我该如何解决这个问题?

最佳答案

您需要将 start 作为指针传递给 add 函数中的指针,以便您可以准确地在您指定的位置修改它。声明应该类似于 void add(int num, node** start)

此外,您还应注意在程序结束前释放分配给列表的内存。

关于c - c中的链表遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22009096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com