C 在单链表中,Head和tail指针的值始终相同

C 在单链表中,Head和tail指针的值始终相同,c,linked-list,singly-linked-list,C,Linked List,Singly Linked List,我试图创建一个包含两个参数的节点的单链表。每当我使用尾部指针将另一个节点排队时,头部指针的值与新节点的值相同 我确信指针指向相同的内存位置或类似的东西,但我不确定如何修复这个问题 struct node { struct process *p; struct node *next; } struct node* head; struct node* tail; void enqueue(struct process* newProcess) { struct node

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

我确信指针指向相同的内存位置或类似的东西,但我不确定如何修复这个问题

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
会将tail设置为null,因为它不是第一次设置的,然后tail和head会在随后的调用中立即被覆盖。

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

tail = tail->next = newNode;

也可以这样考虑:

tail = tail->next;
tail = newNode;
如果在下一个语句中重新分配同一个变量,那么将变量分配给值有什么意义?您前面也有相同的错误:

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

由于第二行的原因,您使用第一行实现的唯一一件事就是内存泄漏。完全删除第一行。

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

tail = tail->next = newNode;

也可以这样考虑:

tail = tail->next;
tail = newNode;
如果在下一个语句中重新分配同一个变量,那么将变量分配给值有什么意义?您前面也有相同的错误:

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

由于第二行的原因,您使用第一行实现的唯一一件事就是内存泄漏。完全删除第一行。

`newNode->p=malloc(sizeof(struct process));newNode->p=newProcess`内存泄漏
tail=tail->next
在哪里更新
tail->next
指针值?建议在stackoverflow.com中搜索“单链接列表”`newNode->p=malloc(sizeof(struct process));newNode->p=newProcess`内存泄漏
tail=tail->next
以及在哪里更新
tail->next
指针值?建议在stackoverflow.com中搜索“单链接列表”