在 C++ 中打印一个简单的链表,数据结构
Printing a simple linked list in C++, data-structure
我在打印单向链表时遇到问题,它必须像这样查找:
[1:2][3:4][7:2][9:1],但 result/the 输出没有最后一个元素,即:[1:2][3:4][7 :2]。这是我的数据结构:
struct numbers {
int info1;
int info2;
numbers *next;
};
struct numbers* next= NULL; //At first 0,because the list is empty
struct numbers* head=NULL; //at the beginning
以及我稍后调用的函数:
void printing(numbers *head) {
numbers *temp=head;
if(head!=NULL) {
do {
printf("[%d:%d]",temp->info1, temp->info2);
temp=temp->next;
} while(temp->next!=head && temp->next!=0);
}
return;
}
这个函数有错误吗?
在while
条件下,我不知道你为什么要检查temp->next!=head
。
但是对于 null 条件,您应该检查 temp!=0
或 temp!=NULL
而不是 temp->next!=0
我不明白条件
temp->next!=head
没有输出最后一个节点,因为不是
temp->next!=0
你必须检查
temp != 0
因为您已经将指针移到循环内
temp=temp->next;
所以函数是错误的。它应该看起来像
void printing( numbers *head )
{
for ( numbers *temp = head; temp != 0; temp = temp->next )
{
printf( "[%d:%d]", temp->info1, temp->info2 );
}
}
仅此代码就足够了。您的代码的问题是您 return 每当它的下一个指针变为 NULL 时,最后一个节点就是这种情况。
void printing(numbers *head) {
numbers *temp=head;
while( temp != NULL ){
printf("[%d:%d]",temp->info1, temp->info2);
temp=temp->next;
}
}
问题是您正在前进到下一个节点,然后检查该节点是否有一个空的下一个节点。因此,您永远不会打印最后一个节点。您可以将代码重写为:
void printing(numbers *head) {
numbers *temp = head;
if (head != NULL) {
while (temp != NULL)
printf("[%d:%d]", temp->info1, temp->info2);
temp = temp->next;
}
}
return;
}
我在打印单向链表时遇到问题,它必须像这样查找: [1:2][3:4][7:2][9:1],但 result/the 输出没有最后一个元素,即:[1:2][3:4][7 :2]。这是我的数据结构:
struct numbers {
int info1;
int info2;
numbers *next;
};
struct numbers* next= NULL; //At first 0,because the list is empty
struct numbers* head=NULL; //at the beginning
以及我稍后调用的函数:
void printing(numbers *head) {
numbers *temp=head;
if(head!=NULL) {
do {
printf("[%d:%d]",temp->info1, temp->info2);
temp=temp->next;
} while(temp->next!=head && temp->next!=0);
}
return;
}
这个函数有错误吗?
在while
条件下,我不知道你为什么要检查temp->next!=head
。
但是对于 null 条件,您应该检查 temp!=0
或 temp!=NULL
而不是 temp->next!=0
我不明白条件
temp->next!=head
没有输出最后一个节点,因为不是
temp->next!=0
你必须检查
temp != 0
因为您已经将指针移到循环内
temp=temp->next;
所以函数是错误的。它应该看起来像
void printing( numbers *head )
{
for ( numbers *temp = head; temp != 0; temp = temp->next )
{
printf( "[%d:%d]", temp->info1, temp->info2 );
}
}
仅此代码就足够了。您的代码的问题是您 return 每当它的下一个指针变为 NULL 时,最后一个节点就是这种情况。
void printing(numbers *head) {
numbers *temp=head;
while( temp != NULL ){
printf("[%d:%d]",temp->info1, temp->info2);
temp=temp->next;
}
}
问题是您正在前进到下一个节点,然后检查该节点是否有一个空的下一个节点。因此,您永远不会打印最后一个节点。您可以将代码重写为:
void printing(numbers *head) {
numbers *temp = head;
if (head != NULL) {
while (temp != NULL)
printf("[%d:%d]", temp->info1, temp->info2);
temp = temp->next;
}
}
return;
}