复制链表,然后对其排序
Copying and then sorting a linked list
我有一个节点链表,每个节点定义为:
struct Node {
char name[14];
int counts[130];
char gender;
Node *nextPtr;
};
我用下面的代码复制这个链表:
// Create a copy of the current list
Node *tempPtr;
while (headPtr != NULL) {
tempPtr = new Node;
tempPtr = headPtr;
// Advance the list
headPtr = headPtr->nextPtr;
} // End while loop
我需要复制列表以便排序,我不想对原始列表排序。排序将根据counts[]数组中某个位置的值降序进行。我想知道有没有人能告诉我,我抄写的清单对吗?如果我能有一些关于如何处理和排序这个列表的见解。我用Java编写了这个程序,没有问题,我很抱歉对c编程语言了解太少。任何输入将非常感激。谢谢你!
对不起,我要用c++编程语言写这个。然而,我不允许使用c++类。我只能使用c++ I/O流、引用参数和动态内存分配。
我在这里的主要目标是创建一个指向现有节点的指针列表,然后在不复制节点或干扰原始列表的情况下对其进行排序。
在c中没有new
这样的东西。您使用c++编译器吗?
忽略这一点,问题是您没有复制任何内容,实际上正在创建内存泄漏:
tempPtr = new Node;
tempPtr = headPtr;
在堆上创建一个新节点,将指针赋值给tempPtr
…然后将tempPtr
重新分配给headPtr
。您刚刚丢失了新分配的Node
(内存泄漏)。
要复制列表,需要遍历现有列表,将数据复制到要添加到新列表的新节点中。
Node *oldNode = headPtr;
Node *newHead = malloc(sizeof(struct Node));
Node *tail = newHead;
while(oldNode != NULL)
{
memcpy(tail, oldNode, sizeof(struct Node));
oldNode = oldNode->nextPtr;
if (oldNode != NULL)
{
tail->nextPtr = malloc(sizeof(struct Node));
tail = tail->nextPtr;
}
}
(未经测试,我没有做C一段时间,但应该这样做)
相关文章:
- 读取一组用户输入,按升序排序,然后打印结果
- C++ 按数值对元组<字符串、浮点数>然后按字典顺序排序的向量
- 修改的选择排序,选择最大的数字,然后交换到最后
- 如何创建一个C++程序来读取字符串数组中的信息,然后将其排序到类中?
- 如何根据长度然后字母顺序对数组字符串进行排序?
- 从文件中读取并将其内容放入对象数组中,然后对它们进行排序
- 对数组进行排序的算法,先是第一个元素,然后是前 2 个元素,然后是前 3 个元素,依此类推
- 按字母顺序排序字符数组,然后按长度排序
- 按第一个值的递减顺序对一组对进行排序,然后按第二个值的字母顺序排序
- 制作一个对的向量,对其进行排序,然后从中提取向量
- 根据标准对结构向量进行排序,然后显示结果
- 我有不同的类,我想用这些类中的对象制作一个向量,然后按值对其进行排序
- 读取中的链接列表,然后按名称进行排序
- 从文本文件将整数读入简单的链表中.然后对整数列表进行气泡排序并读出到另一个文件
- 是否有插入然后排序的替代方法
- c++我需要将文件中的数据读取到多维数组中,然后用一种数据类型对数组进行排序.怎样
- 插入最有效的数据结构,然后使用不同的条件进行排序
- 如何按第一个,然后是第二个,然后是第三个对 2d 数组进行排序,..使用 C++ 的列
- 对输入'age'名称进行排序,然后显示结果
- 提升ASIO-获得排序的端点(首先是IPv4,然后是IPv6)