你好,我在"获取"节点时遇到了一些问题,到目前为止,我的代码看起来是这样的。。。
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);
这个输出看起来像这个
list_head before anything:list:8 100 7 6 5 3 200 2 1 0 1 2 3 4 5 6 7 8
list_head2调用方法后:list:7
list_head在调用方法后:list:8 100 7
所以我的问题是,我正在破坏list_heads的值,我不知道如何制作它,这样list_head的值和长度就不会改变。任何帮助都将不胜感激。
如果我理解正确,您需要以下
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;
}
删除行时
temp->next = NULL;
那么代码就可以随心所欲地工作了。