【问题标题】:adding elements to sorted linked lists将元素添加到排序的链表
【发布时间】:2012-05-06 14:54:27
【问题描述】:

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

谢谢

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

【问题讨论】:

  • 如果你整晚都在工作,我相信你不介意告诉我们它在哪里崩溃,或者显示 Node 的代码。
  • struct Node { // 构造函数 Node(const T& val= T(), Node* next_ptr=NULL) : data(val), next(next_ptr) { } // 数据成员 T data;节点 *next; };公共:SLList(); SLList(const SLList & lst2); ~SLList();常量 SLList& 运算符=(常量 SLList & rhs); int size() 常量;无效打印()常量; bool find(const T& val) const;无效添加(常量 T& val);无效删除(常量 T& val);私人:节点*头; };
  • 节点是复制构造函数,它在while循环中崩溃。
  • 请将代码添加到问题中(点击编辑)。
  • 我添加了代码。你能查一下吗?

标签: c++ sorting linked-list add


【解决方案1】:

while 退出条件反转:

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

应该是

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

如果currNULL,它会在检查NULL 之前崩溃(准确地说是UB)。

【讨论】:

  • 它仍然在同一个while循环中崩溃。
  • 我不知道,但它会进入 while 循环
  • @user1141641 使用 ideone.com 发布编译并解决问题的代码。否则,无法判断您提供的信息量。如果你需要帮助,你也必须付出一些努力。
  • @user1141641 只需访问 ideone.com,粘贴您的代码,选择 C++,然后提交。
  • 我们如何在ideone中添加另一个application.cpp文件用于输入?
【解决方案2】:

另外,将prev = curr 向前移动:

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

【讨论】:

  • 它只是添加第一个值。它没有添加剩余的值
  • 您在 while 循环之后缺少 prev-&gt;next = tmp; 或类似内容。
猜你喜欢
  • 1970-01-01
  • 2018-08-31
  • 2020-04-14
  • 1970-01-01
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
  • 2017-02-25
  • 1970-01-01
相关资源
最近更新 更多