C++ 链表印刷问题
我试图通过一个void函数打印出两个列表,但我得到的只是输出的一个空白。列表打印得很好,没有void函数,但我想了解为什么会发生这种情况。多谢各位 另外,请忽略合并列表功能。这意味着我正在研究的问题的另一部分C++ 链表印刷问题,c++,pointers,data-structures,linked-list,C++,Pointers,Data Structures,Linked List,我试图通过一个void函数打印出两个列表,但我得到的只是输出的一个空白。列表打印得很好,没有void函数,但我想了解为什么会发生这种情况。多谢各位 另外,请忽略合并列表功能。这意味着我正在研究的问题的另一部分 #include <iostream> using namespace std; struct Node { int data; Node *link; }; typedef Node* NodePtr; void headInsert(NodePtr&
#include <iostream>
using namespace std;
struct Node {
int data;
Node *link;
};
typedef Node* NodePtr;
void headInsert(NodePtr& head, int the_number);
NodePtr mergeLists(NodePtr& firstList, NodePtr& secondList);
void outputList(NodePtr head);
int main()
{
NodePtr firstHead, secondHead;
headInsert(firstHead, 9);
headInsert(firstHead, 7);
headInsert(firstHead, 5);
headInsert(firstHead, 3);
outputList(firstHead);
headInsert(secondHead, 8);
headInsert(secondHead, 6);
headInsert(secondHead, 4);
headInsert(secondHead, 2);
outputList(secondHead);
//combinedList = mergeLists(firstHead, secondHead);
return 0;
}
void headInsert(NodePtr& head, int number)
{
NodePtr temp;
temp = new Node;
temp->data = number;
temp->link = head;
head = temp;
}
NodePtr mergeLists(NodePtr& firstList, NodePtr& secondList)
{
NodePtr mainList, iter;
for(iter = firstList; iter != NULL; iter = iter -> link)
headInsert(mainList, iter->data);
for(iter = secondList; iter != NULL; iter = iter -> link)
headInsert(mainList, iter->data);
return mainList;
}
void outputList(NodePtr head)
{
for(NodePtr iter = head; iter != NULL; iter = iter -> link)
cout << iter->data << " ";
cout << endl;
}
#包括
使用名称空间std;
结构节点{
int数据;
节点*链接;
};
typedef节点*NodePtr;
无效的头部插入物(NodePtr和head,输入_编号);
NodePtr合并列表(NodePtr&firstList、NodePtr&secondList);
无效输出列表(节点接收头);
int main()
{
NodePtr firstHead,secondHead;
头部嵌件(第一个头部,9);
头部嵌件(第一个头部,7);
头部嵌件(第一个头部,5);
头部嵌件(第一个头部,3);
输出列表(第一头);
头部嵌件(第二个头部,8);
头部嵌件(第二头部,6);
头部嵌件(第二个头部,4);
头部嵌件(第二个头部,2个);
输出列表(第二标题);
//combinedList=合并列表(第一个头,第二个头);
返回0;
}
空心封头插入件(节点接管和封头,内部编号)
{
NodePtr温度;
temp=新节点;
温度->数据=数量;
温度->链接=头部;
压头=温度;
}
NodePtr合并列表(NodePtr&firstList、NodePtr&secondList)
{
国际热核实验堆NodePtr主列表;
for(iter=firstList;iter!=NULL;iter=iter->link)
标题插入(主列表,iter->数据);
for(iter=secondList;iter!=NULL;iter=iter->link)
标题插入(主列表,iter->数据);
返回主列表;
}
无效输出列表(节点接收头)
{
for(NodePtr iter=head;iter!=NULL;iter=iter->link)
cout data据我所知,我没有看到firstHead、secondHead初始化为NULL,因此它们将永远不会为NULL,for循环将停止。我添加了以下行:
firstHead = secondHead = NULL;
在主函数中声明了firstHead和secondHead之后,它似乎起作用了。希望这有帮助你所说的“void function”是什么意思?我想如果你一步一步地完成这个程序,你会很快发现你的问题……我指的是void function“outputList”,位于我的代码的第12行。您的指针未初始化。默认情况下,它们不会为NULL
(我指的是您在函数中本地声明的每个指针,例如mainList
,firstHead
,secondHead
,等等。)@Bornina好吧,这并不是关于良好实践与否的问题,原因是当您在堆栈上声明一个新变量,如Node*p;
,它的值将是垃圾数据(完全任意),并且由于您在尝试打印时在列表上进行迭代,当您点击NULL
指针时停止,我猜您希望指针初始化为NULL
作为开始(至少是因为您在插入函数中的设置方式)