带有标题节点

时间:2016-09-21 11:14:51

标签: c linked-list queue

  

列表的类型定义照常在linkedList.h中。

 #ifndef LINKEDLIST_H
 #define LINKEDLIST_H

 typedef struct snode {
        int value;  
        struct snode *next; 
 } snodeType;

 typedef struct hnode {int count;
        snodeType *first;
        snodeType *last; 
 } sList;

 sList* create_sList(void);
 int insert_element_s(sList *L, snodeType *p, int value);
 int delete_element_s(sList *L, snodeType *p); 
 sList* merge_lists(sList *L1, sList *L2);

 #endif /* LINKEDLIST_H */

问题是:

  

sList * create_sList(void)创建列表并将其返回给   呼叫者。它必须为头节点分配内存,初始化   struct hnode中的字段。

sList* create_sList(void) {

    sList *list = NULL;
    list->first  = (sList*)malloc(sizeof(snodeType));
    list->last  = (sList*)malloc(sizeof(snodeType));

/*  2nd option
    sList *list = NULL;
    node = malloc(sizeof(snodeType));
    node->next= NULL;
    list->first = node;
    list->last = node;
*/

    return list;
}

我需要发起这个链表,是否有人知道如何?

2 个答案:

答案 0 :(得分:1)

那应该只是:

sList * create_sList(void)
{
  sList *list = malloc(sizof *list);
  if(list != NULL)
  {
    list->count = 0;
    list->first = list->last = NULL;
  }
  return list;
}

这将返回一个没有元素的列表头,即一个空列表头。

答案 1 :(得分:0)

To"启动"(创建)链接列表,你应该通过

分配头指针
sList* create_sList(void) {
  sList *list = NULL;
  if ((list = malloc(sizeof(sList))) == NULL) // always check your mallocs  
    return (NULL);
  if ((list->first = malloc(sizeof(snodeType))) == NULL)
    return (NULL);
  bzero(list->first, sizeof(snodeType));
  list->last = list->first;
  return (list);
}

然后使用int insert_element_s(sList *L, snodeType *p, int value);,* p是列表的最后一个或第一个元素,* L是列表,值是值。 :)