2014-10-08 132 views
0

我正在定義一個鏈接列表,其中的結構(第一個)與其他類型的結構不同。這個第一個節點總是存在。創建具有不同結構類型的鏈接列表

Type1 -> Type2_1 -> Type2_2 -> Type2_3->etc 

我必須能夠重新排列Type2元素。例如,我可以有:

Type1 -> Type2_3 -> Type2_1 -> Type2_2 -> etc 

我試圖做到這一點的方式是通過定義一個雙鏈表。每個Type2元素可以指向下一個Type2,前一個,如果需要的話可以是Type1。如果Type2元素位於Type1旁邊,則其指向前一個Type2的指針將設置爲NULL。

typedef struct Type2{ 
     struct Type2 *next; 
     struct Type2 *previous; 
     int isNextToType1; 
    } Type2; 

有沒有更好的方法來做到這一點?

+2

如果先前的指針設置爲NULL,那麼您需要什麼'isNextToType1'成員來處理?只需檢查一個'NULL''前一個'指針。 – Drax 2014-10-08 15:37:46

+0

@Drax應該是一個答案。 – 2014-10-08 16:38:13

+0

您最好將此數據表徵爲包含鏈接列表(Type2s)的結構(Type1)。以這種方式思考可能會提示引導你走向更有效的方向。 – 2014-10-08 16:41:12

回答

2
typedef struct Type2 
{ 
    ... 
    struct Type2 *previous; // This is NULL for the first element 
    struct Type2 *next; // This is NULL for the last element 
} Type2; 

typedef struct Type1 
{ 
    ... 
    struct Type2* list; // This might be NULL if the list is empty 
} Type1; 

看起來像你不需要任何東西比這更多。

相關問題