双链表错误

时间:2016-04-09 19:55:37

标签: c data-structures doubly-linked-list

所以,我正在尝试在双向链表中进行操作,我尝试应用删除逻辑,但它显示出某种无效错误。请告诉我这段代码有什么问题。 错误消息与代码行一起写入。

获取新节点的功能:

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);
}

1 个答案:

答案 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()时,该错误应该消失。