我可以通过这种方式为链接列表实现push_back方法吗?

时间:2020-07-28 10:49:48

标签: c++ pointers memory singly-linked-list push-back

我已经在为链接列表做push_back方法了,

#include <iostream>
using namespace std;

class Node{
public:
    int data;
    Node* next;
    Node(int data,
 Node* next = nullptr){
        this->data = data;
        this->next = next;
    }
};

Node* head = nullptr;

void push_back(int data){
    if(head == nullptr){
        head = new Node(data);
    }
    else{
        Node *current = head;
        while(current->next != nullptr){
            current = current->next;
        }
        current->next = new Node(data);
    }
}

但是我想知道是否可以在另一个节点之后添加一个节点(我正在谈论下面的这段代码):

    else{
        Node *current = head;
        while(current->next != nullptr){
            current = current->next;
        }
        current->next = new Node(data);
    }

不使用条件:

while(current->next != nullptr)
{current = current->next;}

,而是这样做:

while(current != nullptr){current = current->next;}

这样做时,我们将当前指针均衡为nullptr。从那时开始是否可以在末尾添加一个新的Node并将该Node链接到整个列表?

或者while(current != nullptr)的概念 不利于push_back()?

1 个答案:

答案 0 :(得分:2)

通过将指针指向要更改的指针,您可以执行类似的操作。

void push_back(int data){
    Node** current = &head;
    while(*current != nullptr) { current = &(*current)->next; }
    *current = new Node(data);
}

作为奖励,您再也没有空列表的特殊情况了。

相关问题