C:Enqueue() - 在链表的末尾插入,返回列表的头部

时间:2014-10-26 03:28:37

标签: c insert linked-list queue

我对编程非常陌生。尝试编写一个接收列表头部的函数+要插入的数据 - 并传回列表的新头部。我已经通过在列表的头部添加一个元素来做了很多,但由于某种原因,我无法绕过这个微小的差异。

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct node_{
    int data;
    struct node_ *next;
} Queue;

int main(void){

   Queue* queue = NULL;

   queue = enqueue(queue, 1);

   assert(queue->next == NULL);
   assert(queue->data == 1);

   queue = enqueue(queue, 2);

   assert(queue->data == 1);
   assert(queue->next != NULL);
   assert(queue->next->data == 2);

   free(queue->next);
   free(queue);

   return 0;

}

Queue *enqueue(Queue *queue, int data){

    Queue *new_node, *p;

    new_node = malloc(sizeof(Queue));

    new_node->data = data;
    new_node->next = NULL;

    p = queue;

    while(p->next != NULL){
        p = p->next;
    }

    p->next = new_node;

    return ??????

}

我知道要插入头部,你可以:

new_node->data = data; 
new_node->next = queue;
return new_node;

道歉,如果我上面写的内容没有多大意义。我已经累了,而且我经历了不少次迭代。可能遗漏了一些明显的东西。

3 个答案:

答案 0 :(得分:2)

返回queue。您还必须测试输入queue是否为NULL,在这种情况下,您显然无法访问next指针来查找结尾,因此在这种情况下只返回新节点。 / p>

Queue *enqueue(Queue *queue, int data){

    Queue *new_node, *p;

    new_node = malloc(sizeof(Queue));
    new_node->data = data;
    new_node->next = NULL;

    if (!queue)
        return new_node;

    p = queue;
    while (p->next)
        p = p->next;
    p->next = new_node;

    return queue;
}

答案 1 :(得分:1)

当你发送头部指针时,queue在这里你不需要返回任何东西。


#include<stdio.h>
#include<stdlib.h>

typedef struct node_{
    int data;
    struct node_ *next;
} Queue;

Queue * enqueue(Queue *queue, int data){

    Queue *new_node, *p;

    new_node = malloc(sizeof(Queue));

    new_node->data = data;
    new_node->next = NULL;

    p = queue;

    while(p->next != NULL){
        p = p->next;
    }

    p->next = new_node;
    p = new_node;

    return (queue);
}

void display(Queue *queue)
{
    Queue *temp;
    for(temp=queue->next;temp!=NULL;temp=temp->next)
        printf("%d -> ",temp->data);
    printf("null \n");
}

int main(void){

    Queue *queue;
    queue = malloc(sizeof(Queue));
    queue->next = NULL;
    queue = enqueue(queue, 1);
    queue = enqueue(queue, 2);
    queue = enqueue(queue, 3);
    queue = enqueue(queue, 4);
    display(queue);
}

<强>输出

1 -> 2 -> 3 -> 4 -> null

答案 2 :(得分:0)

enqueue函数中:

检查参数队列是否为NULL,第一次是真的,你应该把它作为一个特例来处理:

if (queue == NULL) 
{      
    p = new_node;
    p->next = NULL;
    return p;
}