将元素添加到排序的链表



我正在处理单个链表,其中我遇到了添加函数的问题,该函数将整数添加到排序方式。但是我的程序一直崩溃。我整晚都在工作,但我找不到问题所在。有人对此有任何想法吗?

谢谢

template<typename T>
class SLList
{
private:
struct Node
{
Node(const T& val= T(), Node* next_ptr=NULL) : data(val), next(next_ptr) { }
// data members
T data;
Node *next;
};

 template<typename T>
void SLList<T>::add(const T& val)
{
 if (find(val)==false)
  {
 Node *curr= head;
 Node* prev=NULL;
  if(head->next==NULL)
  {
      cout<<"head";
      Node *tmp=new Node(val,head->next);
      head->next=tmp;
      return;
  }
  else
  {
  while(curr->data < val && curr!=NULL)
  {
      curr=curr->next;
      prev=curr;
      cout<<"add";
  }
Node *tmp=new Node(val, prev->next);
//head->next=tmp;
  }
}
}    `

while退出条件是反转的:

while(curr->data < val && curr!=NULL)

应该是

while( curr!=NULL && curr->data < val )

如果curr NULL,它将在检查NULL之前崩溃(确切地说是UB)。

另外,向前移动prev = curr

while(curr != NULL && curr->data < val) {
  prev = curr;
  curr = curr->next;
  cout << "add";
}

相关内容

  • 没有找到相关文章

最新更新