繁体   English   中英

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

[英]Head keeps getting the same value as tail pointer in singly linked list

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

我确定指针指向相同的内存位置或相似的位置,但是我不确定如何解决此问题。

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

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

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

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

tail = tail->next = newNode;

另外,请考虑以下事项:

tail = tail->next;
tail = newNode;

如果在下一条语句中重新分配相同的变量,那么将变量分配给值的意义何在? 您之前也有相同的错误:

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

因为有第二行,所以用第一行实现的唯一事情就是内存泄漏。 完全删除第一行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM