2016-06-10 76 views
0

我想插入隊列中的3個元素,然後提取它們中的每一個。每次提取後,我打印剩餘的元素。問題是,在最後一個元素,它表明我已經提取了正確的元素,但該元素仍然在隊列中。從隊列中提取元素,然後打印元素 - 在最後一個元素不起作用

的輸出是這樣的: 打印:8 1 4

提取:4 打印:8 1

提取:1個 打印:8

提取:8 打印:8 ---->這是問題。應該是:「沒有元素!」

#include<malloc.h> 
#include<stdio.h> 

struct Nod{ 
    int id; 
    Nod* next; 
}; 

Nod* insert(Nod* nod,int id){ 
    Nod* nou = (Nod*)malloc(sizeof(Nod)); 
    nou->id = id; 
    nou->next = 0; 

    if (nod == 0) 
     nod = nou; 
    else 
    { 
     nou->next = nod; 
     nod = nou; 
    } 

    return nod; 
} 

int extract(Nod* nod){ 
    if (nod->next == 0){ 
     Nod* temp = nod; 
     nod = 0; 
     return temp->id; 
    } 
    else 
    { 
     Nod* temp = nod; 
     while (temp->next->next) 
      temp = temp->next; 
     Nod* aux = temp->next; 
     temp->next = 0; 
     return aux->id; 
    } 
} 

void print(Nod* nod){ 
    if (nod == 0) 
     printf("\nNo elements !\n"); 
    else 
    { 
     printf("\nPrint : "); 
     Nod* temp = nod; 
     while (temp){ 
      printf("%d ",temp->id); 
      temp = temp->next; 
     } 
     printf("\n"); 
    } 
} 

void main(){ 
    Nod* nod = 0; 

    /////////// 
    nod = insert(nod, 4); 
    nod = insert(nod, 1); 
    nod = insert(nod, 8); 

    print(nod); 

    /////////// 
    int r = extract(nod); 
    printf("\nExtracted : %d",r); 
    print(nod); 
    /// 
    int y = extract(nod); 
    printf("\nExtracted : %d", y); 
    print(nod); 
    /// 
    int p = extract(nod); 
    printf("\nExtracted : %d", p); 
    print(nod); 
} 

回答

0
int extract(Nod* nod){ 
if (nod->next == 0){ 
    Nod* temp = nod; 
    nod = 0; 
    return temp->id; 
} 

問題在於上述code.When只有一個元素離開你正在nod0nod由value.You傳遞可以通過nod作爲參考它是沒有得到體現。

int extract(Nod* &nod){ 
+0

它的工作原理,但我用Nod **點頭。謝謝 ! – Mihai

+0

@downvoter。如果你發表評論會很好。 –

0
int extract(Nod* *nod){ 
    if (((*nod)->next) == 0){ 
     Nod* temp = *nod; 
     *nod = 0; 
     return temp->id; 
    } 
    else 
    { 
     Nod* temp = *nod; 
     while (temp->next->next) 
      temp = temp->next; 
     Nod* aux = temp->next; 
     temp->next = 0; 
     return aux->id; 
    } 
} 

這是我寫的代碼和它的作品! :) 謝謝 !