Head在单链表中保持与尾指针相同的值

问题描述 投票:0回答:2

我正在尝试创建一个包含两个参数的节点的单链表。每当我使用尾指针将另一个节点排队时,头指针的值与新节点的值相同。

我确定指针指向相同的内存位置或类似的东西,但我不知道如何解决这个问题。

struct node
{
    struct process *p;
    struct node *next;
}

struct node* head;
struct node* tail;

void enqueue(struct process* newProcess)
{
    struct node *newNode = malloc(sizeof(struct node));
    newNode->p = malloc(sizeof(struct process));
    newNode->p = newProcess);

    if(tail==NULL)
    {
        head = tail = newNode;
        return;
    }

    tail = tail->next;
    tail = newNode;
}

我想使用这个函数来创建一个单链表,头节点指向列表中的第一个元素,尾节点指向列表中的最后一个元素。当前代码导致两个变量代表最后添加的元素。

c linked-list singly-linked-list
2个回答
1
投票

设置tail = tail->next将tail设置为null,因为它没有在第一次设置,然后在后续调用中立即覆盖tail和head。


1
投票

这里有一些问题。首先,要解决您的问题,请将最后两行替换为:

tail = tail->next = newNode;

另外,考虑一下:

tail = tail->next;
tail = newNode;

如果在下一个语句中重新分配同一个变量,那么为一个值赋值是什么意思?您之前也有同样的错误:

newNode->p = malloc(sizeof(struct process));
newNode->p = newProcess;

由于第二行,您在第一行中唯一实现的是内存泄漏。完全删除第一行。

© www.soinside.com 2019 - 2024. All rights reserved.