所以,我正在尝试在双向链表中进行操作,我尝试应用删除逻辑,但它显示出某种无效错误。请告诉我这段代码有什么问题。 错误消息与代码行一起写入。
获取新节点的功能:
void getnewnode(int x)
{
struct node* temp = (struct node*)malloc(sizeof(struct node*));
temp->data = x;
temp->next = NULL;
temp->prev = NULL;
}
插入功能:
void insertatbeg(int x)
{
struct node* newnode=getnewnode(x); /* void value not ignored as it ought to be. */
if(head==NULL)
{
head = newnode;
}
else
{
head->prev = newnode;
newnode->next = head;
head = newnode;
}
}
删除(第n个节点)功能:
void delete(int n)
{
struct node* temp1=head;
int i;
if(temp1 == NULL)
return;
for(i = 0; i < n-2; i++)
{
temp1 = temp1->next;
}
struct node* temp2 = temp1->next;
(temp2->next)->prev = temp1;
temp1->next = temp2->next;
free(temp2);
}
这是主要功能:
struct node /* List called node */
{
struct node* next;
int data;
struct node* prev;
};
struct node* head;
void insertatbeg(int x);
void delete(int n);
int main()
{
int x;
head = NULL;
insertatbeg(x);
insertatbeg(x);
insertatbeg(x);
delete(2);
}
答案 0 :(得分:0)
在我看来你的问题就在这里:
void getnewnode(int x)
{
struct node* temp = (struct node*)malloc(sizeof(struct node*));
temp->data = x;
temp->next = NULL;
temp->prev = NULL;
}
具体来说,在第一行。您可能希望它为sizeof(struct node)
,以便您的指针引用节点,而不是指向节点的指针。
您还需要让函数返回一个值。所以改成它:
void getnewnode(int x)
{
....
return temp;
}
你在这一行上收到错误的原因是:
struct node* newnode=getnewnode(x); /* void value not ignored as it ought to be. */
您的getnewnode
函数是否未返回值。因此无法为newnode
分配值。当您将建议的更改设为getnewnode()
时,该错误应该消失。