2015-03-19 132 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 2015-03-19 10:56:25

+0

@傑裏它是C – Newbie786 2015-03-19 10:58:09

+0

用C不必PTR1 =(節點*)malloc的(的sizeof(節點));沒有結構。 – JerryGoyal 2015-03-19 10:59:24

回答

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

你正在改變未來新創建的指針ptr1的PTR上。 ptr1的下一個在這裏顯然是空的。你必須讓它指向的PTR

ptr1->next = ptr->next 

然後你下一個節點,使PTR指向PTR1

ptr->next = ptr1 

它會工作,請發表您的控制檯中看到的錯誤。

+0

錯誤是代碼根本沒有運行,它要求一次又一次地輸入輸入,然後在輸入多個輸入後終止 – Newbie786 2015-03-19 11:18:38

+0

然後問題與您的主要功能。發佈您的主要功能 – 2015-03-19 11:22:46

+0

是的,它現在正在工作,謝謝 – Newbie786 2015-03-19 11:25:52

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 
    }