gpt4 book ai didi

c - "Overwriting"C 中的链表

转载 作者:行者123 更新时间:2023-11-30 14:42:06 26 4
gpt4 key购买 nike

前提:作业中所需的功能之一是对链接列表进行排序。我的做法可能效率很低,但这是我知道的唯一方法。

问题:如果我有一个信息链接列表,我将如何(在函数内)“覆盖”传入链接列表的信息。

代码:

void sortPlaylist(Node **pList) {
Node * pCur = (*pList);

// Find size of list
int size = sizeOfList(*pList);

// Create a new Node, allocate the memory for a copy of the whole list
Node * sortedList = NULL;

// Create an array of the Records in our list
Record * records;
records = malloc(size * sizeof(Record));
for (int i = 0; i < size; i++) {
records[i] = pCur->record;
pCur = pCur->pNext;
}

// Selection sort the records (it works with arrays, the code is long though)

// Write the sorted records into a new list
for (int i = 0; i < size; i++) {
printf("\nAdding artist to new list %s\n\n", records[i].artist);
insertFront(&sortedList, records[i]);
printRecord(sortedList);
}

// ERROR HERE I THINK
// Assign the sorted list to pList
*pList = sortedList;

// Free the sortedList
free(sortedList);
}

错误在于我如何将排序列表分配回原始 pList 我相信。另外我想知道 free(sortedList) 的使用是否正确,它将释放排序列表中涉及的所有内存,或者只是指向它的指针,在这种情况下,我想我只是运行一个 for 循环释放整个列表。

谢谢

最佳答案

free(sortedList) 调用绝对是一个问题。你已经创建了一个完整的链表,设置pList指向它,然后删除头部。

您更有可能想要释放原始列表中的节点,因为您将在新的 sortedList 中为调用者提供它们的副本。

此外,是的,为了不泄漏内存,您需要遍历列表并释放每个节点。 (假设 insertFront 正在创建新节点)。

关于c - "Overwriting"C 中的链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54601469/

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