【问题标题】:linked list insertion, pointer confusion链表插入,指针混淆
【发布时间】:2019-08-05 07:11:48
【问题描述】:

我浏览了论坛,但似乎找不到这个非常笼统的问题的答案。下面的类是一个基本的单链表,pushBack 以标准方式编写。

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;
        }
};

但是为什么我的pushBack函数不能这样写呢?

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

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

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

感谢您的帮助!

【问题讨论】:

  • 在“...为什么我的pushBack函数不能这样写?”是一个矛盾:你写了它,但声称它不能写。所以请准确地说出你的意思。
  • 很明显“为什么我的pushBack函数不能这样写?”意思是“为什么这样写时它不起作用”......多么毫无意义的批评,哈哈。

标签: c++ singly-linked-list


【解决方案1】:

您的函数在第一次插入或推回时会失败,即当头指针开始为空时。当你像这样将 head 分配给 curr 时:

curr = head;

curr 现在指向 head,反之亦然。当 curr 然后被分配 temp(即,当第一个节点插入此链表时),您只重新分配了指针 curr 与 temp 保存的位置。现在你所拥有的只是一个指向与 temp 相同位置的指针 curr,这两个指针根本没有连接到头指针!

您的代码的修改版本是:

void pushBack(int d)
{

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


【讨论】:

  • ...我不知道为什么我没有看到,哈哈。感谢您抽出宝贵时间!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-07
  • 2018-10-07
  • 1970-01-01
  • 2010-09-25
  • 2011-09-04
相关资源
最近更新 更多