gpt4 book ai didi

c - 如果(条件)从链表中删除一个节点

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

我的链表是从具有 4 个整数的结构构建的。只要整数 ttl 低于 1,就应该从我的列表中删除该节点。我目前拥有的代码在某些情况下有效,即仅当要删除的节点位于列表的头部时。

typedef struct _ttl_t {
int x;
int y;
int value;
int ttl;
struct ttl *next;
} ttl_t;



ttl_t *remove_ttl (ttl_t *head) { // ’r’ command
if (head==NULL){
return head;
}
else {
ttl_t *curr=head;
while (curr){
if (curr->ttl<1){
head=curr->next;
free(curr);
}
curr=curr->next;
}
}
return head;
}

最佳答案

对于初学者来说,typedef 中的结构声明

typedef struct _ttl_t {
int x;
int y;
int value;
int ttl;
struct ttl *next;
} ttl_t;

不正确。 struct _ttl_tstruct ttl 是两种不同的类型。我想你的意思是

typedef struct _ttl_t {
int x;
int y;
int value;
int ttl;
struct _ttl_t *next;
} ttl_t;

这个循环

    while (curr){
if (curr->ttl<1){
head=curr->next;
free(curr);
}
curr=curr->next;
}

也是不正确的,因为如果节点的数据成员 ttl 小于 1,则头节点会更改,尽管它自己的数据成员 ttl 可以大于或等于1.

如果通过指针引用传递头节点,函数可以定义得更简单。

例如

void remove_ttl( ttl_t **head ) 
{
while ( *head != NULL )
{
if ( ( *head )->ttl < 1 )
{
ttl_t *tmp = *head;
*head = ( *head )->next;
free( tmp );
}
else
{
head = &( *head )->next;
}
}
}

关于c - 如果(条件)从链表中删除一个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58283921/

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