C++ 链表印刷问题

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&

我试图通过一个void函数打印出两个列表,但我得到的只是输出的一个空白。列表打印得很好,没有void函数,但我想了解为什么会发生这种情况。多谢各位

另外,请忽略合并列表功能。这意味着我正在研究的问题的另一部分

#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
作为开始(至少是因为您在插入函数中的设置方式)