列表的类型定义照常在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;
}
我需要发起这个链表,是否有人知道如何?
答案 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是列表,值是值。 :)