嘿,伙计们,我在让for循环工作时遇到了一些麻烦。myList是一个链表,其中填充了文件中的数字,我正在尝试遍历它并以一种(当前,下一个)的方式打印当前值和每个下一个值-
linkedList test = myList;
for (int i = 1; i <= count; i++)
{
cout << "(" << test.listHead->value << "," << test.listHead->next->value << ")-->";
test.listHead = test.listHead->next;
}
出于某种原因,for循环无法执行任何操作,或者更确切地说,代码在for循环的开始就中断了。如果我摆脱for循环并只是复制和粘贴
cout << "(" << test.listHead->value << "," << test.listHead->next->value << ")-->";
test.listHead = test.listHead->next;
很多时候它会按照我的意愿工作,但我宁愿不这样做。for 循环语法看起来是正确的,如果 say count 是 17,那么在到达列表末尾之前,应该有 17 次迭代。
编辑:
包括类的源代码
class listNode{
public:
int value;
listNode* next;
friend class linkedList;
listNode():value(0),next(0) {
}
public:
~listNode(){
};
};
class linkedList{
public:
listNode* listHead;
listNode* spot;
int count;
linkedList()
{
listHead->value = -9999;
}
bool isEmpty()
{
return (listHead == NULL);
}
void listInsert (int data)
{
spot = findSpot(data);
listNode* newNode = new listNode;
newNode-> value = data;
newNode-> next = spot->next;
spot->next = newNode;
cout << "inserted " << newNode->value << endl;
}
listNode* findSpot (int data)
{
spot = listHead;
if (isEmpty())
{
return NULL;
}
while (spot->next != NULL && spot->next->value < data)
{
spot = spot->next;
}
if (spot->next->value == data)
{
cout << "The number: " << data << " already exists in the linked list." << endl;
spot = spot->next;
}
return spot;
}
由于我正在输出到文件(使用流输出文件)。如果我这样做
outfile << "(" << test.listHead->value << "," << test.listHead->next->value << ")-->";
test.listHead = test.listHead->next;
正好是17倍(这是链表和计数变量的大小),它为我生成了整个列表。但是每当我尝试初始化一个
listNode* test = myList.ListHead;
然后它将拒绝运行。它编译得很好,但是运行结束了。
我在主要使用什么来填充链接列表
ifstream infile;
infile.open((argv[1]));
while (infile >> data)
{
myList.listInsert(data);
}
您实际上在循环中修改了列表头指针。您需要对当前节点使用单独的变量,并将其初始化为列表头。在取消引用下一个指针之前,您还需要检查它是否有效。
喜欢
auto currentNode = myList.listHead;
for (int i = 1; i <= count && currentNode != nullptr; ++i, currentNode = currentNode->next)
{
if (currentNode->next != nullptr)
{
cout << "(" << currentNode->value << "," << currentNode->next->value << ")-->";
}
else
{
cout << "(" << currentNode->value << ")-->";
}
}
实际的问题是< code>linkedList类,它有一个主要问题,会导致几种未定义行为的情况:您没有初始化该类的成员变量。因为它们没有被初始化,所以它们的值将是不确定的,并且除了初始化它们之外,以任何方式使用它们都将导致所述UB。
您需要将<code>列表头
如果您需要在列表末尾保留一个虚拟节点(尽管我不知道为什么),那么您实际上需要分配一个节点。
每次我们在堆中为链表分配内存时,我们都会得到一个地址,这个地址链接到链表的下一个变量,head是指向链表初始节点的指针。 如果我们做,那么它会指向下一个链表,或者指向堆的随机内存,或者指向堆中初学者列表的下一个内存。
如果水平顺序遍历优于rest遍历,那么在二叉搜索树中学习它们有什么用呢? 与顺序遍历和前序遍历相比,级别顺序遍历似乎更容易获取信息。
我有一个通用的链表,其中保存的数据类型为空*我试图填充我的列表与结构雇员类型,最终我想破坏对象结构雇员以及。 考虑这个通用的链接列表头文件(我已经用char*类型测试过了): 考虑员工结构 现在考虑从main()调用的示例测试用例: 为什么我在下面发布的答案解决了我的问题?我相信这与指针和内存分配有关。我使用的函数Malloc()是一个自定义Malloc,用于检查是否返回NULL。 下面是我的整个
问题内容: 如何以相反的顺序遍历链接哈希表?地图中是否有预定义的方法可以做到这一点? 我创建它如下: 问题答案: List > list = new ArrayList<>(map.entrySet()); 确实不是很漂亮,但是要花费一个条目集的副本,如果您的地图上有很多条目,则可能会出现问题。 出色的Guava库具有一个,可让您将Java 5用于每个样式循环而不是索引循环:
本文向大家介绍单链表反转 遍历法Java实现相关面试题,主要包含被问及单链表反转 遍历法Java实现时的应答技巧和注意事项,需要的朋友参考一下