gpt4 book ai didi

c++ - 链表打印/删除功能炸弹程序

转载 作者:行者123 更新时间:2023-11-28 00:32:37 25 4
gpt4 key购买 nike

我意识到这可能是一个简单的问题,但我没有捕获它。我的要求是我必须“4) 删除链接列表并再次打印列表。(确保它从内存中消失)”

所以我调用了 delete 函数并单步执行它,函数完成时 head 应该设置为 NULL。

/*----------------------------------------------------------------------------
* Function: deleteList
* Purpose: delete a link list
* Arguments: head - a pointer to the first node in the linked list
* Returns: N/A
------------------------------------------------------------------------------*/
void deleteList(node *head)
{
struct node *temp;

// Loop through the list, deleting one node at a time.
while(head != NULL)
{
temp = head->next;
delete(head);
head = temp;
}
}

所以当我调用 print 函数并在 head 中发送时,它应该为 NULL 并捕获第一个 if 语句并返回到 main。但它正在爆炸。

/*----------------------------------------------------------------------------
* Function: printList
* Purpose: prints a link list
* Arguments: head - a pointer to the first node in the linked list
* Returns: N/A
------------------------------------------------------------------------------*/
void printList(node *head)
{
if (head == NULL)
{
cout << "Empty List!\n";
return;
}

struct node *temp;
temp = head;

// Loop through the list, printing one node at a time.
while(temp->next != NULL)
{
cout << temp->next->element << endl;
temp = temp->next;
}
}

现在,如果我在 main 中使用以下内容,它就可以正常工作。但我想知道打印功能中缺少什么小东西。一段时间以来我一直在思考这个问题,所以我想我应该退后一步并寻求一些指导。

int main()
{
....
cout << "\n***************** DELETE LIST & PRINT ********************\n";
deleteList(head);

cout << head->element << endl; // This works and shows the list is empty.
//printList(head); // This bombs the program.
....
}

非常感谢。

节点定义如下:

struct node
{
string element;
struct node *next;
};

在main中声明head:

struct node *head;

//creating head node.
if ((head=new(node)) == NULL)
{
cout << "Error: Could not create head node.\n";
return 1;
}
head->next = NULL;

最佳答案

当你在 main 中使用时

deleteList(head);

指向同一位置的指针“head”的拷贝作为参数传递。因此,如果您更改“head”指向的变量,例如:

delete(head);

这将在 main() 中可见。但是当你更新指针“head”本身时,例如:

head = temp;

唯一更新的指针是函数范围内的指针,不是 main 中的指针。所以现在 main 中的“head”指针指向一个已删除的变量。

要解决这个问题,您可以返回“head”应该指向的新位置,如下所示:

node *deleteList(node *head)
{
struct node *temp;

// Loop through the list, deleting one node at a time.
while(head != NULL)
{
temp = head->next;
delete(head);
head = temp;
}
return head;
}

然后调用它

head = deleteList(head);

关于c++ - 链表打印/删除功能炸弹程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22238679/

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