2017-10-12 107 views
-1
typedef struct _node *Node; 
typedef struct _list *List; 

typedef struct _list { 
    Node head; 
} list; 

typedef struct _node { 
    int value; 
    Node next; 
} node; 

int listLength (List l); 

int ListLength (List l) { 

    /* Insert code here */ 

    return result; //replace this 
} 

嘿,我是新來的鏈表,我不確定如何檢查列表的長度。我打算創建一個這樣做的函數,但我不確定如果列表只包含(節點頭)而不包含(和下一節點),如何移動列表。獲取鏈表的長度

+0

一個'Node'是一個指向'_node'和'_node'包含'Node'稱爲'next'在裏面。所以每個Node都可以讓你找到下一個Node。 (國際海事組織(IMO),這種typedefs的使用是很糟糕的,理解一個Node的最重要的事情就是它是一個指向某個東西的指針,並且你已經模糊了它)。 –

+0

當你插入節點時,你有最後一個'node- > next = NULL;'正確嗎?爲什麼不'node * tmp = l;'和'while(tmp!= NULL){/ *統計你的節點* /; tmp = tmp-> next; }'? –

+0

嘿大家,這是一個練習題,所以我必須使用給我的格式。 – lkal

回答

2

試試這個

int listLength (List l) { 
    int len = 0; 
    Node n = l->head; 
    while(n != NULL){ 
     len++; 
     n = n->next; 
    } 
    return len; 
} 

當你插入你要設置其下爲NULL的元素!

Node createNode(int val){ 
    Node n = malloc(sizeof(node)); 
    n->value = val; 
    n->next = NULL; 
    return n; 
} 

void add(int val, List l){ 
    if(l->head == NULL){ 
     l->head = createNode(val); 
    } else { 
     Node n = l->head; 
     while(n->next != NULL){ 
      n = n->next; 
     } 
     n->next = createNode(val); 
    } 
} 

對於malloc的,你必須包含STDLIB #include<stdlib.h>