【问题标题】:Implementing fa unction that adds and sorts data in a singly linked list (addsort)?实现在单链表中添加和排序数据的功能 (addsort)?
【发布时间】:2011-11-24 07:53:53
【问题描述】:

我对 C++ 很陌生,所以有时很难理解语法。无论如何,我应该实现一个函数,将给定的数据添加和排序到一个链表中。例如,如果我将 2 传递到列表 [1,4,5] 中,那么我应该得到 [1,2,4,5]

这是我到目前为止所写的,不,它不起作用,我不断收到“blah blah not declared in this scope”

void addSorted(Data * ){
  temp = 0;
  if (head == NULL) {
      head = new LinkNode(newData);
  }
  else {
      LinkNode * current = head;
      while (current->next != NULL) {
              current = current->next;
          }
      if(current->data > current->next->data){
          temp = current->data;
          current->data = current->next->data;
          current->next->data = temp;
      }
      current->next = new LinkNode(newData);
  }
}

有人请帮助我,我正在使用我认为已经给出的 struct LinkNode,除了一堆其他功能,如添加、插入、删除、获取和大小

我不只是想得到答案,我需要知道为什么我所拥有的东西不起作用。

【问题讨论】:

  • 请告诉具体的错误信息是什么,否则很难帮助您。 Data * 看起来有点奇怪,不知道是不是这个问题。
  • 不管你信不信,那个“blahblah”很重要。请包含完整的错误消息并标记它发生的行。

标签: c++ list sorting linked-list


【解决方案1】:

希望你真的付出了你的努力..我发布了整个函数,用于将数据按排序顺序插入列表,这是我很久以前写的

void addData(node * head, int data){

        if(head == NULL) {  // First node

                node * temp = new node;
                temp -> data = data;
                temp -> next = NULL;
                head = temp;
                root = head;
        }else{

                node * prev = NULL;

                while(head -> next != NULL){  // Sorted Addition Logic is HERE

                        if(data >= head -> data){
                                prev = head;
                                head = head -> next;
                                continue;
                        }else{

                                node * temp = new node;
                                temp -> data = data; 
                                temp -> next = head;
                                if(prev != NULL)
                                   prev -> next = temp;
                                else
                                   head = temp;
                                break;
                        }
                }

                if(head -> next == NULL){

                        node * temp = new node;
                        temp -> data = data;
                        head -> next = temp;
                        temp -> next = NULL;
                }

        }
}

看到你的代码,似乎你的逻辑本身是错误的......你总是在最后一个节点(while循环)结束,并且在下一个 if 语句中你试图比较下一个不存在的节点的数据

【讨论】:

  • 好的,谢谢,我只是想理解你在那里做了什么,srrry 我有点慢(而且是新的),当你将它设置为相等时,“根”是什么意思(在第一个“如果”)?另外,我确定“继续”和“中断”在这里真正起作用吗?我猜“休息”就像停止一样?但是要继续吗?
  • 首先你真的需要一本好书来学习 C/C++ 编程:)。不要担心第一个 if “if(head == NULL)”。该部分将仅对第一个节点执行。对于其余节点,它将转到“else”部分。
  • "continue" 表示在 continue 之后不执行剩余的语句并从循环中重新开始(在这种情况下)。 “Break”意味着退出循环,因此不会再次进入循环(在这种情况下)
  • 由于您是 SO 新手,我必须告诉您,如果您发现任何答案正确,那么您必须通过单击投票下方的“勾号”来接受该答案:)。否则你不会找到很多帮手
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 2018-01-06
  • 2019-01-07
相关资源
最近更新 更多