双链表C ++函数后插入不起作用

问题描述

我写了一个insertAfter函数,但是它不起作用 请帮忙!!!

功能不起作用。当我运行它时,测试失败。

  template <class T>
  void LinkedList<T>::insertAfter(T toInsert,T afterWhat)
 {
  ListItem<T> *Node = (ListItem<T>*)malloc(sizeof(ListItem<T>));
     Node->value = toInsert;
     Node->next = NULL;
     Node->prev = NULL;
    if(head == NULL){
    return;
    }
    ListItem<T> *temp = head;
    while(temp->value != afterWhat && temp->next != NULL){
    temp = temp->next;
    }

temp->next->prev = Node;
temp->next = Node;
Node->prev = temp;
Node->next = temp->next;
}

解决方法

下一个和上一个节点的分配顺序错误

temp->next->prev = Node;
temp->next = Node;
Node->prev = temp;
Node->next = temp->next;

因为在第二行中,您有temp-> next = Node,然后有Node-> next = temp-> next,结果是Node-> next = Node。像这样修复它

temp->next->prev = Node;
Node->prev = temp;
Node->next = temp->next;
temp->next = Node;// changed the position of this statement