我目前正在尝试在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->prev
应该有效吗?
答案 0 :(得分:6)
是的,head
是指向头节点指针的指针。因此,您可以通过以下方式访问->prev
:
(*head)->prev = newNode;
如果没有括号,C的运算符优先级规则将语句解析为
*(head->prev) = newNode;
这不是你想要的。
答案 1 :(得分:0)
node ** head
这里head
是指向指针的指针,(*head)
是指针。
所以你需要访问像
(*head)->prev = newnode;