2016-09-21 63 views
2

列表的类型定义像往常一样在linkedList.h中。C中带有头节点的链接列表

#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(无效)创建列表,并将其返回给调用者 。它必须为头节点分配内存,初始化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

你是什么意思发起清单? –

+2

'sList * create_sList(void){sList * list = malloc(sizeof(* list)); list-> count = 0; list-> last = list-> first = NULL;退货清单; }' – BLUEPIXY

回答

1

这应该仅仅是:

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

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

+0

@ Garf365谢谢,没有看到它由于缩进。固定。 – unwind

0

为“启动”(创建)链接的列表,你应该做

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是名单价值就是价值。 :)

+1

为什么要为第一个节点分配内存?这是一个空列表,所以'list-> first'和'list-> last'应该等于'NULL','list-> count'应该等于零 – Garf365

+0

没有意识到你想要一个空列表对不起:) –