实现在单链表中添加和排序数据的功能(addsort)?

时间:2011-09-24 17:12:36

标签: c++ list sorting linked-list

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

这是我到目前为止所写的内容,并且没有它不起作用,我一直得到“在这个范围内没有声明等等”

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

有人请帮帮我,我正在使用我认为已经给出的结构LinkNode,除了一堆其他函数,如add,insert,remove,get和size

我不想得到答案,我需要知道为什么我的工作不起作用。

1 个答案:

答案 0 :(得分: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 statment中你试图比较下一个节点的数据是不存在的