2016-04-09 55 views
-3

所以,我試圖在雙向鏈表中進行操作,並嘗試應用刪除邏輯,但它顯示出某種無效錯誤。請告訴我這段代碼有什麼問題。 錯誤消息與代碼行一起寫入。雙鏈表錯誤

函數來獲得新的節點:

void getnewnode(int x) 
{ 
    struct node* temp = (struct node*)malloc(sizeof(struct node*)); 
    temp->data = x; 
    temp->next = NULL; 
    temp->prev = NULL; 
} 

插入功能:

void insertatbeg(int x) 
{ 
    struct node* newnode=getnewnode(x); /* void value not ignored as it ought to be. */ 
    if(head==NULL) 
    { 
     head = newnode; 
    } 
    else 
    { 
     head->prev = newnode; 
     newnode->next = head; 
     head = newnode; 
    } 
} 

刪除(第n個節點)功能:

void delete(int n) 
{ 
    struct node* temp1=head; 
    int i; 
    if(temp1 == NULL) 
     return; 
    for(i = 0; i < n-2; i++) 
    { 
     temp1 = temp1->next; 
    } 
    struct node* temp2 = temp1->next; 
    (temp2->next)->prev = temp1; 
    temp1->next = temp2->next; 
    free(temp2); 
} 

這裏的主要功能是:

struct node /* List called node */ 
{    
    struct node* next; 
    int data; 
    struct node* prev; 
}; 

struct node* head; 

void insertatbeg(int x); 
void delete(int n); 
int main() 
{  
    int x; 
    head = NULL; 
    insertatbeg(x); 
    insertatbeg(x); 
    insertatbeg(x); 
    delete(2); 
} 
+2

請縮進您的代碼,以使其可讀。 –

+2

請發佈確切的錯誤信息。 –

+1

函數:'getnewnode()'似乎是調試問題的關鍵。和'delete()'沒有任何關係,所以爲什麼要發佈它?請發佈代碼:'getnewnode()'; – user3629249

回答

0

看起來對我來說你的問題就在這裏:

void getnewnode(int x) 
{ 
    struct node* temp = (struct node*)malloc(sizeof(struct node*)); 
    temp->data = x; 
    temp->next = NULL; 
    temp->prev = NULL; 
} 

具體而言,在第一線。您可能希望它是sizeof(struct node),以便您的指針引用節點,而不是指向節點的指針。

你還需要讓你的函數返回一個值。因此,將其更改爲:

void getnewnode(int x) 
{ 
    .... 
    return temp; 
} 

你得到該線路上錯誤的原因:

struct node* newnode=getnewnode(x); /* void value not ignored as it ought to be. */ 

那是你getnewnode函數沒有返回值。所以newnode不能被分配一個值。當您建議更改爲getnewnode()時,該錯誤應該消失。

+0

好吧,我按照你的建議添加了return語句。但是,它仍然顯示相同的錯誤。奇怪,我想。 –

+0

@KartikV:編譯器輸出的* exact *錯誤消息是什麼? –