尝试对链表进行排序时出现左值错误

Posted

技术标签:

【中文标题】尝试对链表进行排序时出现左值错误【英文标题】:lvalue error when trying to sort linked list 【发布时间】:2016-04-13 04:08:22 【问题描述】:

我希望程序将链表从最小到最大重新排列,但是当我尝试制作 prev->link()=temp;minum->link()=head_ptr; 时,我不断收到“错误:需要左值作为赋值的左操作数”

  node* previouse_minimum(node*& head_ptr)
    node* cursor;
    node* minimum;
    node* prev;
    minimum=head_ptr;

    for(cursor=head_ptr; cursor != NULL; cursor=cursor->link())
      if(cursor->data() < minimum->data())
         minimum=cursor;

    cursor = head_ptr;
    prev = cursor;
   while(cursor->link() != minimum)
    
      cursor = cursor->link();
      prev = cursor;

    
    cout << prev->link()->data() << endl;
    return prev;



void sort(node*& head_ptr, node*& marker_ptr)

   node* print_ptr;
   node* prev = previouse_minimum(head_ptr);
   node* temp=NULL;
   node* minum;
   marker_ptr = head_ptr;

   while(marker_ptr->link()->link()!= NULL)
    
      minum = prev->link();
      temp=minum->link();
      prev->link()=temp;
      minum->link()=head_ptr;
      head_ptr=minum;
      marker_ptr=minum->link();
      prev=previouse_minimum(marker_ptr);
    
   for(print_ptr = head_ptr; print_ptr !=NULL; print_ptr = print_ptr->link())
   cout <<  print_ptr->data() << " ";

   cout << endl;

   

【问题讨论】:

显然link() 是一个返回左值的方法,这意味着你不能给它分配任何东西。您没有显示node 的代码,但您应该使用底层变量进行赋值。 【参考方案1】:

prev-&gt;link()minum-&gt;link() 是返回节点的函数。您不能为函数分配值/指针。要设置节点,您可以使用 void link(node* input) 之类的参数重载 link() 函数。

【讨论】:

以上是关于尝试对链表进行排序时出现左值错误的主要内容,如果未能解决你的问题,请参考以下文章

如何使用优先队列对链表进行排序

JAVA:对链表中相邻的重复值进行排序

链表上的合并排序

147. [链表]对链表进行插入排序

对链表进行插入排序

279,对链表进行插入排序