"Overwriting" C 中的链表
"Overwriting" Linked Lists in C
前提:
作业中所需的功能之一是对链表进行排序。我这样做的方式可能非常低效,但这是我知道该怎么做的唯一方式。
问题:
如果我有一个信息链表,我将如何(在一个函数内)"overwrite"一个传入链表的信息。
代码:
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) 的使用是否正确,它会释放 sortedList 中涉及的所有内存,或者只是指向它的指针,在这种情况下我想我只是 运行通过 for 循环释放整个列表。
谢谢
free(sortedList)
调用肯定有问题。你已经创建了一个完整的链表,
设置pList
指向它,然后删除头部。
您更有可能想要释放原始列表中的节点,因为您将在新的 sortedList
.
中为调用者提供它们的副本
此外,是的,为了不泄漏内存,您需要遍历列表并释放每个节点。 (假设 insertFront
正在创建新节点)。
前提: 作业中所需的功能之一是对链表进行排序。我这样做的方式可能非常低效,但这是我知道该怎么做的唯一方式。
问题: 如果我有一个信息链表,我将如何(在一个函数内)"overwrite"一个传入链表的信息。
代码:
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) 的使用是否正确,它会释放 sortedList 中涉及的所有内存,或者只是指向它的指针,在这种情况下我想我只是 运行通过 for 循环释放整个列表。
谢谢
free(sortedList)
调用肯定有问题。你已经创建了一个完整的链表,
设置pList
指向它,然后删除头部。
您更有可能想要释放原始列表中的节点,因为您将在新的 sortedList
.
此外,是的,为了不泄漏内存,您需要遍历列表并释放每个节点。 (假设 insertFront
正在创建新节点)。