具有标题节点的C中的链表



列表的类型定义通常在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(创建列表并将其返回给呼叫者它必须为头节点分配内存,初始化结构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;
}

我只需要启动这个链接列表,有人知道怎么做吗?

应该是:

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

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

要"初始化"(创建(链表,您应该通过来分配头指针

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是列表,value是值。:(

最新更新