我是编码的新手,我试图实现一系列链接列表。我已经填充了结构和列表数组,但是我的print函数只打印数组索引[0],第一个列表元素,而没有将指针移动到数组[0]中的第二个列表元素。从本质上讲,它是一个无限循环,只能打印第一个元素。
我的问题是:如何将指针移动到列表中的下一个元素,以便我可以完成打印列表并将数组索引移动到下一个索引?
我的结构如下:
struct Node
{
int Vertex;
Node* next;
};
在插入所有节点和列表后,我的打印功能如下所示:
void printList(Node* adjList[5])
{
int a;
for (int b = 0; b <= 5; b++)
{
a = 0;
while (adjList[a]->next != NULL)
{
cout << "(" << adjList[a]->Vertex;
cout << ", " << adjList[a]->next->Vertex << ") ";
cout << a << endl;
system("pause");
}
a++;
}
cout << endl << endl;
}
忽略我打印的部分&#34; a&#34;然后暂停,因为我试图弄清楚我遇到的另一个问题。但是现在我认为我需要的是如何将指针移动到每个数组索引的列表中的下一个元素。
编辑:在阅读下面的评论之后,这里是我的主要代表列表数组的一小部分:
int main()
{
Node *adjList[5];
adjList[0] = new Node;
adjList[0]->Vertex = 1;
adjList[0]->next = new Node;
adjList[0]->next->Vertex = 4;
adjList[1] = new Node;
...
printList(adjList);
答案 0 :(得分:0)
很难知道您对打印功能的期望值是多少。但是,以下代码应该输出正确的内容而不会崩溃。请注意,我通过printNode
引入了递归,以确保打印子节点!
void printNode(Node* node)
{
if (node != NULL)
{
cout << "(" << node->Vertex;
cout << ", ";
printNode( node->next );
cout << ")";
}
else
{
cout << "null";
}
}
void printList(Node* adjList[5])
{
for (size_t index = 0; index < 5; index++)
{
printNode(adjList[index]);
cout << endl;
}
}
您必须确保未使用的next
属性设置为NULL ,以便可以停止递归。所以你的初始化必须是:
Node *adjList[5];
adjList[0] = new Node;
adjList[0]->Vertex = 1;
adjList[0]->next = new Node;
adjList[0]->next->Vertex = 4;
adjList[0]->next->next = NULL; // added, was uninitialized
adjList[1] = new Node;
...
例如,这个程序:
int main()
{
Node *adjList[5];
adjList[0] = new Node;
adjList[0]->Vertex = 1;
adjList[0]->next = new Node;
adjList[0]->next->Vertex = 4;
adjList[0]->next->next = NULL; // added, was uninitialized
adjList[1] = new Node;
adjList[1]->Vertex = 6;
adjList[1]->next = new Node;
adjList[1]->next->Vertex = 7;
adjList[1]->next->next = NULL; // added, was uninitialized
adjList[2] = NULL;
adjList[3] = NULL;
adjList[4] = NULL;
printList( adjList );
return 0;
}
输出:
(1, (4, null))
(6, (7, null))
null
null
null