这是我的链表函数,它将新节点添加到列表的末尾。
void addNodeAtTail( struct Student *student, struct Courses *newNode )
{
newNode->next = NULL; // sucessor of newNode is NULL, because newNode becomes tail of list
if ( student->list == NULL )
student->list = newNode; // if list is empty, newNode will be head of list
else
{
struct Courses *temp = student->list;
while( temp->next != NULL ) // search last element in list
temp = temp->next;
temp->next = newNode; // successor of last node is newNode
}
}
这个相同的函数可以用于将节点添加到我可能拥有的不同链表中吗?还是因为我们正在处理另一个结构而必须创建另一个函数?
如果您尝试添加的对象不是struct Courses *newNode
则无法使用此功能添加它。如果你需要一个通用的链表,你需要弄乱传递void *
这很有趣。这是一个合理的教程:
http://www.geeksforgeeks.org/generic-linked-list-in-c-2/
目前,没有,因为您正在明确处理struct Courses
的实例。如果你想要一个通用列表,请使用 cons-cell:
struct list {
struct list* next;
void* data;
}
此外,C 中的列表可以嵌入到其他结构中。例如,请参阅有关如何在 Linux 内核中使用列表的说明。以下是文章的片段:
struct my_cool_list{
struct list_head list; /* kernel's list structure */
int my_cool_data;
void* my_cool_void;
};