2016-04-09 7 views
-3

二重リンクリストで操作しようとしていますが、削除のロジックを適用しようとしましたが、何らかの無効なエラーが表示されています。このコードで何が間違っているのか教えてください。 エラーメッセージはコード行の横に記載されています。新しいノードを取得する二重リンクリストエラー

機能:

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

挿入機能:(n番目のノード)機能

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

の削除:

:ここ

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); 
} 
具体的に

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

、最初の行に:

+2

コードをインデントして読み取り可能にしてください。 –

+2

正確なエラーメッセージを投稿してください。 –

+1

関数: 'getnewnode()'は問題をデバッグするのに重要であるようです。 'delete()'は問題とは関係がないので、なぜ投稿するのですか?以下のコードを投稿してください: 'getnewnode()'; – user3629249

答えて

0

はあなたの問題はここにある私には見えます。おそらく、ポインタがノードへのポインタではなく、ノードを参照するように、それを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 *エラーメッセージは何ですか? –