2015-03-19 84 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 
    }