这是我的链表,它包含一个字符串版本的键,其中包含内容的字符串表示形式:
struct node{
char key[10];
char content;
struct node *next;
};
struct node *head=(struct node *) NULL;
struct node *tail=(struct node *) NULL;
struct node * initinode(char *key, char content)
{
struct node *ptr;
ptr = (struct node *) calloc( 1, sizeof(struct node ) );
if( ptr == NULL )
return (struct node *) NULL;
else {
strcpy( ptr->key, key );
ptr->content = content;
return ptr;
}
}
void printnode( struct node *ptr )
{
printf("Key ->%s\n", ptr->key );
printf("Contents ->%d\n", ptr->content );
}
void printlist( struct node *ptr )
{
while( ptr != NULL )
{
printnode( ptr );
ptr = ptr->next;
}
}
void add( struct node *new )
{
if( head == NULL )
head = new;
tail->next = new;
tail->next = NULL;
tail= new;
}
struct node * searchname( struct node *ptr, char *key )
{
while( strcmp( key, ptr->key ) != 0 ) {
ptr = ptr->next;
if( ptr == NULL )
break;
}
return ptr;
}
//-----------------------------add to the list number of files and print list
int file_count = 0;
DIR * dirp;
struct dirent * entry;
dirp = opendir(cwd);
while ((entry = readdir(dirp)) != NULL)
{
if (entry->d_type == DT_REG) { /* If the entry is a regular file */
file_count++;
}
}
printf("%d \n",file_count);
char file=(char)file_count;
closedir(dirp);
ptr=initinode(files, file);
add(ptr);
printlist( head );
//-----------------------------------casting
除了这个问题,我想在其字符串表示形式中将不同的数据类型添加到我的列表中。我想尝试将其转换为字符串,但似乎我用于此的方法不适用于其他人。如果你建议潜水一个虚拟dataype列表,请彻底解释。
谢谢
答案 0 :(得分:1)
在您的代码中,我在此处发表评论
void add( struct node *new )
{
if( head == NULL )
head = new;
tail->next = new; // Making tail point to next node
tail->next = NULL; // but, immediately setting tail to NULL --> problem
tail= new; // tail pointing to new but connection to previous node lost
}
我觉得这个功能可能是
void add( struct node *new )
{
if( head == NULL ) {
head = new;
tail = new; // Grow at tail and keep head static
}
else {
tail->next = new; // Connect current node to next
tail= new; // Move tail to new node
tail->next = NULL; // Since this is the last node, set next to NULL
}
}
还有另外一点需要考虑。在此调用中,printlist( head );
您正在传递正在函数内部更新的head
指针。我觉得制作head
的副本并将其传递给函数可能是一个好主意,这样head
总是指向列表的第一个元素。
P.S:请避免将变量命名为new
,因为它是C++