【问题标题】:Linked List in C with header nodeC中带有头节点的链表
【发布时间】:2017-01-29 14:42:49
【问题描述】:

列表的类型定义和往常一样在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(sizeof(*list)); list->count = 0; list->last = list->first = NULL; return list; }

标签: c linked-list queue


【解决方案1】:

应该是这样的:

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

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

【讨论】:

  • @Garf365 谢谢,由于缩进没看到。固定。
【解决方案2】:

要“初始化”(创建)链表,你应该分配头指针

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

【讨论】:

  • 为什么要为第一个节点分配内存?这是一个空列表,所以list->firstlist->last 应该等于NULLlist->count 应该等于零
  • 没有意识到你想要一个空列表抱歉:)
猜你喜欢
  • 1970-01-01
  • 2011-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-08
  • 2021-11-19
  • 2019-07-31
  • 2019-06-09
相关资源
最近更新 更多