2016-04-13 15 views
1

我想要的程序来重新排列从最小到最大的一个链表,但我不断收到“错误:左值要求作为分配的左操作数”当我试图让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; 

    } 
+0

显然'link()'是一个返回左值的方法,这意味着你不能指定任何东西。你不会显示你的'node'代码,但你应该使用底层变量来分配。 –

回答

0

prev->link()以及minum->link()是返回节点的函数。你不能给函数赋值/指针。要设置节点,可以使用void link(node* input)之类的参数来重载link()函数。