gpt4 book ai didi

c - 在用 C 实现的链表中使用单指针和双指针

转载 作者:行者123 更新时间:2023-12-01 12:55:19 26 4
gpt4 key购买 nike

我正在编写用于在链表末尾添加元素的代码:

struct node{
int info;
struct node* link;
};

void append ( struct node **q, int num )
{

struct node *temp, *r ;

if ( *q == NULL ) // if the list is empty, create first node
{
temp = (struct node*) malloc ( sizeof ( struct node ) ) ;
temp -> info = num ;
temp -> link = NULL ;
*q = temp ;
}
else{
temp = *q ;

/* go to last node */
while ( temp -> link != NULL )
temp = temp -> link ;

/* add node at the end */
r = (struct node *)malloc ( sizeof ( struct node ) ) ;
r -> info = num ;
r -> link = NULL ;
temp -> link = r ;
}
}

我这样调用追加函数: append(&list, 10); 其中list是指向链表的指针

此代码有效,但如果我在追加函数中使用单指针(使用 *q 而不是 **q)并相应地进行更改(如下所示以及我调用它时所做的),它不起作用。下面的代码有什么问题?:

void append ( struct node *q, int num )  
{

struct node *temp, *r ;

if ( q == NULL ) // if the list is empty, create first node
{
temp = (struct node*) malloc ( sizeof ( struct node ) ) ;
temp -> info = num ;
temp -> link = NULL ;
q = temp ;
}
else{
temp = q ;

/* go to last node */
while ( temp -> link != NULL )
temp = temp -> link ;

/* add node at the end */
r = (struct node *)malloc ( sizeof ( struct node ) ) ;
r -> info = num ;
r -> link = NULL ;
temp -> link = r ;
}
}

最佳答案

因为在第二个例子中,q 是调用者传入的指针的副本。调用者的原始指针永远不会被修改。

关于c - 在用 C 实现的链表中使用单指针和双指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10043327/

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