嗨,我想做一个外部单链表。我遇到“赋值中的非Ivalue”问题,并且它出现在“this = currP-> next”行中,我尝试将其设置为currP.next,但也会产生错误

#include <cstdlib>
using namespace std;


struct node{
       int data;
       node *next;

       node(int i){
                data = i;
                next = NULL;
                }

       void insert(int position, node &n){
            node *currP = this;
            node *prevP= NULL;
            for(int counter = 0; counter>=position;counter++, prevP = currP, currP = currP->next){
                    if(counter==position)
                    {
                    n.next  = currP->next;
                    currP->next = &n;
                                         }
                    }

            }

       void add(node &n){
       next = &n;
                 }
       void deleteNode(int i){
            node *currP = this;
            node *prevP = NULL;

            while(currP!= NULL){
               if(currP->data == i){
                  if(prevP == NULL)
                      this = currP->next;
                  else{
                      prevP->next = currP->next;
                  }
               }
               prevP = currP;
               currP = currP->next;
            }
        }
 };

最佳答案

lvalue是一个变量,可以位于equal运算符的左侧。这意味着可以更改其值。您无法更改this的值,只是不允许这样做,因此会出现错误。

您可以按以下方式重新编写函数:

    node* deleteNode(int i){
        if (  this->data == i )
           return this->next;
        else
        {
           if ( this->next )
              this->next = this->next->deleteNode(i);
           else
              return this;
        }
    }
deleteNode()现在将返回一个指向列表其余部分开头的指针,并且递归算法将把第一部分与最后一部分连接起来。它未经测试,因此可能需要进行一些调整,但我希望您明白这一点。

关于c++ - C++:赋值中的非Ivalue,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8034713/

10-13 07:42