不确定是否在单链表中显示唯一数据
Unsure of Displaying Unique Data in Singly Linked List
我很难理解如何打印Singly/Lineral链表中的所有唯一数据。
例如,如果我有以下数据:1->1->2->3
在线性链表中,我必须打印1->2->3
这是我为SLL/LLL节点的结构编写的代码。
struct node
{
int data;
node * next;
};
这是我添加的代码
add(int data)
{
if (!head)
{
head = new node;
head -> data = data;
}
else
{
add(head);
}
}
add(node *& head)
{
if (!head)
{
return;
}
node * front = head -> next;
if (!head -> next)
{
front = new node;
front -> data =
head -> next = front;
return;
}
add(head -> next);
}
这是我显示它的代码:
void displayUnique()
{
if (!head)
{
return;
}
return dU(head);
}
void dU(node * head)
{
if (!head)
{
return;
}
cout << head -> data << " ";
return dU(head -> next);
}
我应该对线性链表进行排序还是进行某种排序?
好的,有两种方法:
1.列表的顺序无关紧要
如果顺序不相关,那么最快的方法是按node.data
对列表进行排序。这给了你O(n*logn)的复杂性。(此外,如果是这种情况,我鼓励您修改add(node *& head)
,因为它在适当的位置插入新的node
,以保持列表排序)。之后,您可以跟踪以前显示的值,并检查它是否相同。如果是,请跳到下一个节点。如果没有,请显示当前的,并记住显示的内容。这就是O(n)。
2.列表的顺序很重要
在这里,问题变得有点复杂。您将需要额外的时间复杂性(不幸的是,我的目标是O(n^2))或额外的内存。我个人的方法是:创建一个临时的std::set
,它会记住你已经显示的数字,每次你在列表中迭代时(如果"迭代列表"不是一个有效的术语,请随时纠正我),你会检查候选人(当前的node.data
)是否已经显示,从而记录在你的std::set
中。在std::set
中搜索是O(n*logn),所以它确实没有那么糟糕(但请记住,将值插入集合比将值插入std::vector
要多花一点时间)。
如果我遗漏了什么(明显或不明显),请随时更正或在评论中询问我。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 字符串-C++后显示的随机字符
- 何时在引用或唯一指针上使用移动语义
- 继承期间显示未知行为的子类
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 计算排序向量的向量中唯一值的计数
- 程序崩溃并显示"std::out_of_range"错误
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 从数据库实时显示QT c++中的数据
- 通过组合不同的类型来创建唯一的id
- 使用Unique_ptr确保工厂中的对象唯一
- 使用 Struct 进行 mp3 播放器模拟C++(不需要播放 mp3 的唯一显示列表)
- 尝试创建一个读取.txt文件,显示它,计数唯一单词的程序,并在使用了多少次的情况下显示独特的单词.C
- 不确定是否在单链表中显示唯一数据
- C++ 显示在 txt 文件中找到的唯一日期及其相关价格
- 访问唯一指针变量并显示它们