我希望对两个节点执行二进制操作,将结果存储在一个节点中并消除另一个节点。这是我的代码:
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <math.h>
struct n{
double value;
char op;
struct n *next;
};
void delete(struct n *head);
void add_item(struct n **ptr, double *data);
int main(){
struct n *head = NULL;
double result;
add_item(&head, 5);
add_item(&head, 3);
head->op = '*';
result = (head->next)->value * head->value;
(head->next)->value = result;
delete(head);
printf("%lf\n",head->value);
free(head);
return 0;
}
void add_item(struct n **ptr, double *data)
{
struct n *item = malloc(sizeof *item);
item->value = *data;
item->next = *ptr;
item->op = '?';
*ptr = item;
}
void delete(struct n *head)
{
struct n *temp;
temp = head->next;
head->next = temp->next;
free(temp);
}
在这个例子中,我有一个像这样的列表
3 -> 5 -> NUll
。我想得到这个15 -> NUll
。当我尝试打印剩余节点的值时,我得到的是3
而不是15
。
head
是什么?你包含了哪些头文件? - Some programmer dude(head->next)->value = result;
,然后紧接着执行delete(head)
时会发生什么,这将无条件删除列表中的第二个节点。 - Some programmer dudevoid delete(struct n **head) {struct n *tmp; tmp=(*head)->next; free(*head) ;*head=tmp;}
。 - William Pursellhead->next = temp->next;
但是我真的释放了第二个节点占用的位置吗?我的意思是有没有一种方法可以丢弃它所有的内容? - Michaelangelo Meucci