2017-04-12 95 views
1

这段代码来自我在学校为数据结构模块工作的任务。这个代码在问题中提供,我无法理解这一点。链接列表定义

typedef struct _listnode { 
    int item; 
    struct _listnode *next; 
} ListNode; // You should not change the definition of ListNode 

typedef struct _linkedlist { 
    int size; 
    ListNode *head; 
} LinkedList; // You should not change the definition of LinkedList 

我很困惑,因为我的演讲幻灯片和我一直在检查的网站刚刚定义了节点,而不是第二个节点。

任何人都可以帮助我吗?

回答

1

LinkedList是一个通过保持其头部及其大小来表示链表的结构,而列表中的每个节点由结构ListNode表示。如果你想保持链表的大小,这是一个常见的范例,在这种情况下,你可以很容易地获得列表中的节点数量,而无需遍历它。另一方面,如果不考虑大小,则可以只使用指向节点的指针,而不必定义结构体LinkedList

所以对于空单,你会:

LinkedList list = (struct LinkedList){0, NULL}; 

对于一个节点列表:

ListNode node; 
node.item = 0; 
node.next = NULL; 
list.head = &node; 
list.size = 1; 
+0

所以,如果我想编写一个函数来将数据插入到列表中,我不得不创建一个使用结构ListNode新的节点? @fluter –

+0

:@JeromePapalie是的。 LinkedList表示整个列表,ListNode表示列表中的单个项目。 – JeremyP

+0

是的,那是ListNode的。 – fluter

0

链表使用本地指针变量指向第一个举行列表中的项目。如果该指针也是NULL,那么该列表被认为是空的。

include <stdio.h> 

int main() { 
    typedef struct node { 
     int val; 
     struct node * next; 
    } node_t; 


return 0; 
}