在双向链表的末尾插入

Insertion at end in doubly linked list

我在双向链表的末尾插入一个节点,但输出只显示第一个和最后一个元素。

void insertend(int y) {

    // y the element to be inserted<br>
    // head is declared as global 

   node *ptr=(node*)malloc(sizeof(node));
   node *ptr1=head;
   ptr->info=y;

   if(head==NULL) {
       ptr->next=ptr->prev=head;
       head=ptr;
   } 
   else {

       ptr->prev=ptr1;
       ptr->next=NULL;
       ptr1->next=ptr;
       ptr1=ptr;
   }

}
 void showtail() {
   node *ptr=head;
   while(ptr!=NULL) {
       printf("%d\n",ptr->info);
       ptr=ptr->next;
   }
}

这里有什么问题?

试一试...

 if(head==NULL)
 {
    ptr->next=ptr->prev=head;
   head=ptr;
  }
 else
 {
   while(ptr1->next!=NULL)
    ptr1=ptr1->next;
   ptr->prev=ptr1;
   ptr->next=NULL;
   ptr1->next=ptr;
   ptr1=ptr;
  }

每次插入前都要遍历到最后一个节点。否则,您必须将 ptr1 保持为静态变量。

当您尝试在 DLL(或)SLL 最后插入元素时,您需要 traverse upto the end of the list

否则您需要维护 Last Inserted 节点的指针。

但是在这段代码中,您总是在第一个节点之后插入元素,这就是为什么您将第一个节点和最后一个节点作为输出。