具有虚拟头和尾的双链表实现

时间:2018-09-17 16:37:56

标签: c

我有以下几点: typedef struct d_node d_node_t;

struct d_node
    {
        void *data;
        d_node_t *next;
        d_node_t *prev;
    };
typedef struct d_list d_list_t;
struct d_list
    {
        d_node_t head;
        d_node_t tail;
    };

如何实现d_list_t * DListCreate(void)函数?

2 个答案:

答案 0 :(得分:2)

  

我不知道如何实现所需的DListCreate

您的DListCreate()函数可能会创建一个空列表,对吗?这意味着没有实际的节点,只有虚拟的头节点和尾节点。因此...问自己,如果没有实际节点,head->next应该指向什么?同样,tail->prev应该指向什么?创建空列表所需要做的就是创建d_list结构之一,然后适当设置headtail指针。

提示:myDList.tail的地址为&(myDList.tail)

答案 1 :(得分:2)

d_list_t *DListCreate(void)
{
    d_list_t *myDList = (d_list_t*)malloc(sizeof(d_list_t));

    if (new_d_list == NULL)
    {
        return(NULL);

    }
   &(myDList.tail)->data = NULL;
   &(myDList.tail)->next = NULL;
   &(myDList.tail)->prev = &(myDList.head)

   &(myDList.head)->data = NULL;
   &(myDList.head)->next = &(myDList.tail);
   &(myDList.head)->prev = NULL;

   return(myDList);
}