在双向链表中的元素后面插入

时间:2015-03-19 10:49:22

标签: c data-structures doubly-linked-list

我在链接列表中的元素之后插入元素,但我的代码没有运行。

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

2 个答案:

答案 0 :(得分:1)

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

您正在更改新创建的指针ptr1旁边的ptr。 ptr1的下一个在这里显然是空的。你必须使它指向ptr的下一个节点

ptr1->next = ptr->next

然后你必须让ptr指向ptr1

ptr->next = ptr1

它会起作用,请发布您在控制台中看到的错误。

答案 1 :(得分: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
    }