链接列表插入,指针混乱



我已经环顾了论坛,但似乎找不到这个非常普遍的问题的答案。下面的类是一个基本的单链接列表,并写下了标准方式。

class linkedList {
    private:
        typedef struct node {
                int data;
                struct node *next;
                node(int d):data(d), next(NULL){}
        }*nodePtr;
        nodePtr head, temp, curr;
    public:
        linkedList():head(NULL), temp(NULL), curr(NULL){}
        void pushBack(int d) { 
            temp = new node(d);
            curr = head;
            if (curr != NULL) {
                while (curr->next != NULL) {
                    curr = curr->next;
                }
                curr->next = temp;
            } else head = temp;
        }
        void printAll() {
            curr = head;
            cout << "list:" << endl;
            while (curr) {
                cout << curr->data << " ";
                curr = curr->next;
            }
            cout << endl;
        }
};

但是为什么不能像这样写下我的退缩功能?

void pushBack(int d) {
        temp = new node(d);
        curr = head;
        while (curr != NULL) {
                curr = curr->next;
        }
        curr = temp;
}

它应该遍历列表,直到curr == null,然后设置curr = temp。如果列表为空,则它不会进入循环,并且通过将温度设置为Curr(将其设置为头)将设置为新节点。

逻辑对我来说是完全有意义的,所以我一定是我缺少的其他东西。

谢谢您的帮助!

您的函数将失败,即首次插入或缩回,即当头指针开始为null时。当您将头分配到这样的时:

curr = head;

Curr现在指向头部,反之亦然。随后分配了curr(即,当第一个节点被列入此链接列表时),您只将指针curr重新分配给了指针curr,请使用温度持有的位置。现在,您所拥有的只是指向与TEMP相同位置的指针,这两个指针都根本没有连接到头指针!

您的代码的修改版本是:

void pushBack(int d)
{
  temp = new node(d);
  curr = head;
    if(curr!=NULL)
    {
       while (curr != NULL) 
       {
          curr = curr->next;
       }
        curr = temp;
    }
    else head=temp;
}

最新更新