gpt4 book ai didi

c - 如何在 C 中获取节点而不丢弃旧链表

转载 作者:行者123 更新时间:2023-11-30 19:14:25 24 4
gpt4 key购买 nike

您好,到目前为止,我在“获取”节点时遇到了一些麻烦,我的代码如下所示...

LinklistNode* get_node(LinklistNode* list_head, int index){
LinklistNode* temp = list_head;
if(temp != NULL && index > 0){
LinklistNode* list_pointer = temp;
LinklistNode* next_list_pointer = list_pointer ->next;
while(next_list_pointer->next != NULL && index >0){
index--;
if(index == 0) break;
list_pointer = next_list_pointer;
next_list_pointer = next_list_pointer ->next;
}
temp = list_pointer->next;
temp->next = NULL;


}
else if(index == 0){
return temp;
}
return temp;
}

...现在我尝试向它传递一个完全相同的临时变量,但我认为这不起作用,因为它们只是共享相同的内存地址,我将其称为如下(也许这会帮助)

LinklistNode* list_head2 = list_head;
list_head2 = get_node(list_head2,2);
print_list(list_head2);
print_list(list_head);

输出看起来像这样

列表头在任何内容之前:列表:8 100 7 6 5 3 200 2 1 0 0 1 2 3 4 5 6 7 8

调用方法后list_head2:list: 7

调用方法后的list_head:list: 8 100 7

所以我的问题是我正在破坏 list_heads 值,并且我不知道如何使其不改变 list_heads 值和长度。任何帮助将不胜感激。

最佳答案

如果我理解正确,你需要以下内容

LinklistNode * get_node( LinklistNode *list_head, unsigned int index )
{
while ( index != 0 && list_head )
{
--index;
list_head = list_head->next;
}

return list_head;
}

原列表不变。

如果您需要提取节点,则该函数可以如下所示

LinklistNode * get_node( LinklistNode **list_head, unsigned int index )
{
LinklistNode *prev = NULL, *current = *list_head;

while ( index != 0 && current )
{
--index;
prev = current;
current = current->next;
}

if ( prev == NULL )
{
if ( current ) *list_head = current->next;
}
else if ( current )
{
prev->next = current->next;
}

if ( current ) current->next = NULL;

return current;
}

如果您需要节点的副本,则该函数可能如下所示

LinklistNode * get_node( LinklistNode *list_head, unsigned int index )
{
LinklistNode *tmp = NULL;

while ( index != 0 && list_head )
{
--index;
list_head = list_head->next;
}

if ( list_head )
{
tmp = malloc( sizeof( LinklistNode ) );
if ( tmp )
{
*tmp = *list_head;
tmp->next = NULL;
}
}

return tmp;
}

关于c - 如何在 C 中获取节点而不丢弃旧链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34121741/

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