2015-03-19 3 views
0

Я вставляю элементы после элемента в связанном списке, но мой код не работает.Вставка после элемента в дважды связанном списке

typedef struct Node 
{ 
    int info; 
    struct Node *next; 
    struct Node *prev; 
}node; 

node *head; 


// w-the element to be inserted & z-the position after which it has to inserted 

void insertpos(int w,int z) 
{ 
    int i; 
    node *ptr=head; 
    node *ptr1; 
    for(i=1;i<=z-1;i++) 
    { 
     ptr=ptr->next; 
    } 
    ptr1=(node*)malloc(sizeof(node)); 
    ptr1->info=w; 
    ptr->next=ptr1; 
    ((ptr->next)->next)->prev=ptr1; 
} 
+0

это C++ не C – JerryGoyal

+0

@ Джерри это C – Newbie786

+0

в C не имеют ptr1 = (узел *) таНос (SizeOf (узел)); без структуры. – JerryGoyal

ответ

1
ptr->next=ptr1; 
    ((ptr->next)->next)->prev=ptr1; 

Вы меняете PTR рядом с вновь созданным указателем ptr1. Следующий ptr1 явно здесь null. Вы должны сделать это, чтобы указать на следующий узел PTR

ptr1->next = ptr->next 

Тогда вы должны сделать PTR указать ptr1

ptr->next = ptr1 

Он будет работать и пожалуйста, напишите ошибку, которую вы видите в консоли.

+0

Ошибка в коде просто не работает, он просит ввести ввод снова и снова, а затем завершить после ввода нескольких входных данных – Newbie786

+0

Тогда проблема с вашей основной функцией. Отправьте свою основную функцию также –

+0

И да, она работает сейчас, спасибо – Newbie786

0

Вы должны связать следующий узел и узел нового узла с новым узлом.

void insertpos(int w,int z) 
     { 
     int i; 
     node *ptr=head; 
     node *ptr1; 
     for(i=1;i<=z-1;i++) 
      { 
      ptr=ptr->next; 
      } 
     ptr1=(node*)malloc(sizeof(node)); 
     ptr1->info=w; 
     ptr1->next=ptr->next->next; //linking new node *next pointer 
     ptr->next->next->prev=ptr1; //linking next node *prev to new node 
     ptr->next=ptr1; //ptr *next to new node 
     ptr1->prev=ptr; //new node *prev to previous node 
    } 
Смежные вопросы