我是c ++的新手,我正在学习链表。但是,我遇到了一些麻烦。
对于正常情况,当我们定义链表时,这里是节点结构:
struct Node{
int data;
Node* next;
};
但是,当结构变为这样时,我们如何定义链表:
struct Node{
int data;
Node** next; // Double pointer instead
};
我对双指针很困惑,我们应该分配给" next"?
例如,当我们在开头插入节点时,当我们将head的值赋给newPtr->next
时:
newPtr->next = &head
?是吗?
谢谢你们所有人。
答案 0 :(得分:0)
我不确定这个,但我只是想分享我的想法,因为我也开始学习指针。如果我错了,请纠正我。
#include <iostream>
int main()
{
int **p = new int*; // Pointer to a pointer.
int *q = new int; // Pointer.
// Assigning the value of 5 to where q points to.
// The "*" is used as a dereference operator
// meaning that it assigns 5 to where q is pointing to.
*q=5;
// Here you are pointing p to point to q.
// That is why it is called a pointer to a pointer.
// The "*" here is used as pointer to point to another pointer.
*p=q;
// Then here you can access the value of the p by dereferencing
// it twice.
std::cout << **p << std::endl;
// Outputs 5.
return 0;
}
正如其他人在评论中所说的那样,你正在创建一个指向指针的指针。 int * p表示它可以直接指向数据,而int ** q表示它可以指向另一个指针,在本例中为* p。 *的数量表示你的深度。假设您希望Node有两个指针,那么您必须执行以下操作:
struct Node
{
int data;
Node *next, *prev;
}
它也被称为双链表。你可以前进和后退的地方。