我目前正在尝试在C中实现一个双向链接列表,并且不了解如何从双指针访问该结构。
这是我的简单结构:
typedef struct node {
int val;
struct node * next;
struct node * prev;
} node;
这是一个简单的方法,在该方法中,我尝试将值推到列表的最前面:
void push_front(node ** head, int newVal)
{
node * newNode = malloc(sizeof(node));
newNode->val = newVal;
newNode->next = head;
*head->prev = newNode;
*head = newNode;
}
但是,该行*head->prev = newNode
给我一个错误,说的左边->prev
必须指向struct/union
。我只是在学习C,所以也许我忽略了一些确实很简单的事情,但是不是将指针指向头节点的指针吗?* head是指向我的head节点的指针。我认为*head->prev
应该采取哪种手段起作用?
是的,head
是指向您的头节点的指针的指针。因此,您可以->prev
通过以下方式进行访问:
(*head)->prev = newNode;
没有括号,C的运算符优先级规则将您的语句解析为
*(head->prev) = newNode;
这不是你想要的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句