c++ - 尝试仅通过操作指针对链表进行排序

标签 c++ sorting pointers linked-list selection

我正在尝试使用选择排序对链表进行排序。我只能操纵链表指针而不能更改键。我想我有功能逻辑,但是,我只是返回原始的未排序序列。

bool nodeSwap(Node* head){

  Node* next = head->next;
  if(next == NULL){ return head;}
  head->next = next->next;
  next->next = head;
  head = next;
  return next;
}
Node* sort_list(Node* head){

for(Node* n = head; n->next != NULL; n = n->next){
    for(Node* n1 = head->next; n1 != NULL; n1 = n1->next){
        if(n-> key > n1->key){
            nodeSwap(n);


            }
    }
}
return head;
}

编辑

好的,所以我完成并添加了更多和一些逻辑,这一次实际上有些意义,我的功能几乎可以正常工作......唯一的问题是它总是跳过列表中前两个元素的排序并且没有'排序后返回。关于为什么会发生这种情况的任何想法?

Node* sort_list(Node* head){

Node* curr;
Node* prev;

  for(curr = head; curr->next != NULL; curr = curr->next){
      if(curr == head){
             head = curr->next;
             curr->next = head->next;
             head->next = curr;
             prev = head;
         }
     else if(curr->key > curr->next->key){
                  head = curr->next;
                  curr->next = head->next;
                  head->next = curr;
                  prev = head;
              } else if(curr -> next -> next != NULL){

                  prev->next = curr->next;
                  curr->next = prev->next->next;
                  prev->next->next = curr;

                  }else if(head != curr){
                        prev = prev->next;
                    }else{}
    }


 return head;
}

最佳答案

尝试放置编译代码和/或提出特定问题。

第 3 行:返回头部;

在一个应该返回 bool 值的函数中

关于c++ - 尝试仅通过操作指针对链表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19577335/

相关文章:

c++ - 如果锁定,mongodb upsert 不会更新

c++ - 非可变参数的 printf 风格记录器

java - 根据教师 ID 对学生列表进行排序

java - 以排序方式添加到哈希表 (Java)

c - 为什么在数组 a[] 中,&a 和 a 相同?

c - C中使用anArray++等表达式时数组和指针的区别

c++ - Glew 不初始化

c++ - 二进制搜索树键/值对 - 我知道值但不知道键 C++

bash - 从列表中查找最旧的文件

c++ - 在 C++ 中创建双向链表