不能追加到LinkedList实现中



我勾画了这个小的单链表示例。但是由于某种原因,新节点没有被正确地附加到列表中。有人能帮我检查一下这个错误吗?

struct Node {
Node(int x, Node *next = nullptr) : x{x}, next{next} {}
int x;
std::shared_ptr<Node> next;
};
class LinkedList {
public:
LinkedList(std::vector<int> const &v) {
for (auto i = 0; i < std::size(v); ++i) {
auto temp = std::make_shared<Node>(v[i], nullptr);
if (head == nullptr) {
head = temp;
} else {
auto ptr = head;
while (ptr != nullptr) {
ptr = ptr->next;
}
ptr = temp;
}
}
}
std::shared_ptr<Node> head = nullptr;
};

int main() {
auto v = std::vector<int>{1, 2, 3};
auto l = LinkedList{v};
}

当你把ptr分配给temp时,想想它是什么

是一个局部变量,在while循环之前用链表的head成员初始化。当你把temp赋值给它时,你知道它的值是nullptr。因此,您已经将指向新节点的指针分配给当前持有nullptr的局部变量。如何将一个元素添加到链表中呢?

要在列表中插入一个项目,你需要一个指向列表中节点的指针,并将指针赋值给它的next成员,例如

...
auto ptr = head;
while (ptr->next != nullptr) {
ptr = ptr->next;
}
ptr->next = temp;
...

但是正如在这个答案的评论中提到的,你插入每个项目的方式有O(n)运行时间,因为你需要遍历整个列表以找到末尾。正确的做法是每次插入操作为0(1)。

相关内容

  • 没有找到相关文章

最新更新