我在Doubly Linked List上为以下函数编写代码
struct node {
int data;
struct node *next;
struct node *prev;
};
/* Given a node as next_node, insert a new node before the given node */
void insertBefore(struct node** next_node, int new_data)
我从main函数调用了insertBefore():
insertBefore(&head, 2); // it works fine
但我不能做同样的前脑 - >接下来,因为下一个指针只是节点*不是节点**
insertBefore(head->(&next), 2); // it doesn't works
我如何解决问题。请帮助。谢谢
答案 0 :(得分:1)
假设您的功能有效,&(head->next)
就是您所需要的。
insertBefore(&(head->next), 2);
答案 1 :(得分:1)
head
是insertBefore(&head, 2);
next
也是指针,是struct node
的成员。
因此,如果您想通过next
访问head
(即指向某个节点的指针),那么,
语法为head->next
。现在,您可以通过next
获取&(head->next)
的地址。
答案 2 :(得分:1)
更改函数以获取对节点指针的引用。
void insertBefore(node*& next_node, int new_data);
...
insertBefore(head->next, 2);
答案 3 :(得分:0)
取消引用指针而不是引用其地址似乎是不合逻辑的......
&(head->next)
将起作用,但它可以正常工作,因为您取消引用指针(获取指针指向的值),而不是使用&
再次获取该指针的地址。
->
与.(*next)
相同。箭头只是获取指针指向的最简单方法。如果你想要指针本身的值,你所要做的只是head.next
。