2016-09-21 43 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

沒有意識到你想要一個空列表對不起:) –