在双向链表的末尾插入
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 节点的指针。
但是在这段代码中,您总是在第一个节点之后插入元素,这就是为什么您将第一个节点和最后一个节点作为输出。
我在双向链表的末尾插入一个节点,但输出只显示第一个和最后一个元素。
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 节点的指针。
但是在这段代码中,您总是在第一个节点之后插入元素,这就是为什么您将第一个节点和最后一个节点作为输出。