我正在尝试在给定节点之前插入节点。但我无法获得所需的输出。
UNION
这里我试图在20之前插入一个节点(数据= 70)。
产出:30,20,10
预期产出:30,70,20,10
答案 0 :(得分:2)
你正在做的一切正确。但是如果传递的参数insert_before
是头,你在next_node
中遗漏了一件事,那么你将在头部之前插入一个节点。因此,您必须将此新添加的节点设为head
。
答案 1 :(得分:1)
当您致电insert_before
时,如果给定节点是头部,则新节点将成为新头部。因此,您需要传递head
的地址才能对其进行修改。
你现在拥有的是这样的:
head
|
v
------ ------ ------
- 30 - ---> - 20 - ---> - 10 -
------ <--- ------ <--- ------
^
------ |
- 70 - ---------|
------
要解决此问题,请在head
的参数中包含insert_before
的地址。
void insert_before(struct node **head, struct node *next_node, int new_data){
struct node* temp = malloc(sizeof(struct node)); // don't cast the return value of malloc
temp->data = new_data;
if(next_node == NULL)
printf("Invalid!!!!");
temp->prev = next_node->prev;
temp->next = next_node;
next_node->prev = temp;
if(temp->prev!=NULL) {
temp->prev->next = temp;
} else {
*head = temp;
}
}
然后这样称呼:
insert_before(&head,head,70);