簡體   English   中英

用C ++數據結構打印一個簡單的鏈表

[英]Printing a simple linked list in C++, data-structure

我在打印單鏈列表時遇到問題,它必須看起來像這樣:[1:2] [3:4] [7:2] [9:1],但是結果/輸出沒有最后一個元素,即因此:[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

但是對於空條件,您應該檢查temp!=0temp!=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 );
    }
}

僅此代碼就足夠了。 代碼的問題在於,當下一個指針變為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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM