当我们尝试实现链表时,我无法理解我们创建节点指针而不是节点结构的原因,如下所示:
typedef struct node {
int val;
struct node * next;
} node_t;
和
node_t * head = NULL;
head = malloc(sizeof(node_t));
if (head == NULL) {
return 1;
}
head->val = 1;
head->next = NULL;
在这里,为什么我们要将head
等节点声明为结构指针而不是直接结构
为什么我们将诸如head这样的节点声明为结构的指针而不是直接结构
将head
声明为指针允许我们有一个空列表,即head
为NULL
将head
作为指针可以实现空列表(head==NULL
)或通过将head
指针移动到列表中的另一个(例如第二个)元素来删除列表前面元素的简单方法。将head
作为一个结构,这些操作将不可能实现,或者至少效率要低得多。
主要原因是C语言根本不允许它-一个struct
类型不能包含自身的实例。原因有两个:
>
在关闭}
之前,结构
类型是不完整的,您不能创建不完整类型的实例;
如果struct
类型可以包含自身的实例,则该实例将无限大(struct foo
包含struct foo
的实例,其中包含struct foo
的实例,无限大)。
但是,您可以创建指向不完整类型的指针(因为指针的大小不取决于指向类型的大小)。因此,如果希望一个struct
类型包含引用同一类型的另一个实例的成员,则必须通过指针来完成。
指向列表中的下一个节点而不是 我明白,最好使用指针版本;我不打算争论事实,但我不知道为什么这样更好。关于指针如何更好地分配内存,我得到了一个不太清楚的答案,我想知道这里是否有人能帮助我更好地理解这一点。
下面是链接列表代码中的删除节点,它将头指针和要删除的位置作为参数(链接列表中的位置索引从零开始)。删除后,返回指向head的指针。 假设列表:20-2-19-7-3-6。要删除的位置是2(节点19要删除,因为索引从零开始)。 删除并打印后,它会显示:20-2-0-3-6。(即,直接位于已删除节点旁边的节点打印0) 但是如果我删除“free(head)”行,那么它将打印:20-2-7-3-6(正确)
本文向大家介绍什么是指向指针的指针? 相关面试题,主要包含被问及什么是指向指针的指针? 时的应答技巧和注意事项,需要的朋友参考一下 指针指向的变量是一个指针,即具体内容为一个指针的值,是一个地址. 此时指针指向的变量长度也是4位.
我有一个非常简单的节点结构,用于实现迭代深化DFS。然而,我后来在将子节点链接到父节点时遇到了麻烦。 后来在我的代码中,当我试图做这样的事情时,我会遇到严重的错误: 我只想将这个子节点(称为Down_节点)链接到它的父节点(称为Next)。但如果Next本身不是一个节点,我该怎么做呢? 正是指向下一步的指针带来了麻烦。我试过了 编辑:当我尝试使用 在/usr/lib/gcc/x86_64-redh
我正在制作一个方法,将一个节点添加到名为“publicvoidadd(int-index,T-value)”的列表中。 此方法将把一个值放入索引中,然后将有指向列表中下一个和上一个元素的指针。我把指向前面节点的指针搞砸了,我一直坐在那里进行实验,但没有让它工作。 示例:我们有一个包含整数值[2,4,6]实例变量的列表:Node head、tail;整数金额,变动; 内部类的实例变量为:T值;节点p