2015-06-12 45 views
2

我在打印一个单独链表时遇到了问题,它必须查找例如: [1:2] [3:4] [7:2] [9:1 ],但结果/输出没有最后一个元素,即:[1:2] [3:4] [7:2]。这是我的数据结构:在C++中打印一个简单的链表,数据结构

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; 
} 

有没有搞错在这个功能呢?

+0

'头= NULL'应该是'TEMP = NULL' – NendoTaka

+0

同时;!(TEMP =头&& TEMP = 0!) – Tim3880

+0

temp-> next!= 0应该是temp!= NULL –

回答

1

我不明白的情况

temp->next!=head 

的最后一个节点不outputed的,因为不是

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); 
    } 
} 
2

while的条件下,我不知道你为什么要检查temp->next!=head

但对于空状态,你应该检查temp!=0temp!=NULL代替temp->next!=0

1

只是这段代码就足够了。你的代码的问题是,当它的下一个指针变为NULL时,你返回,最后一个节点就是这种情况。

void printing(numbers *head) { 
    numbers *temp=head; 
    while(temp != NULL){ 
     printf("[%d:%d]",temp->info1, temp->info2); 
     temp=temp->next; 
    } 
} 
+0

谢谢大家hepp和解释! –

+0

欢迎您:) –

0

问题是你是前进到下一个节点,然后你检查该节点是否有一个空的下一个节点。因此,您将永远不会打印最后一个节点。你可以重写你的代码:

void printing(numbers *head) { 
    numbers *temp = head; 
    if (head != NULL) { 
     while (temp != NULL) 
      printf("[%d:%d]", temp->info1, temp->info2); 
      temp = temp->next; 
     } 
    } 
    return; 
}