我正在尝试创建一个简单的链表,只有一个函数和两个指针。
#include <stdio.h>
#include <stdlib.h>
typedef struct leonor{
int x;
struct leonor * next;
}leo;
出于练习目的,我总是寻找列表的末尾来添加我创建的最后一个新节点。函数(add)如下:
void add(leo **ad)
{
int i;
leo *current, *new, **previous; /*Previous points on the pointer NEXT
*of an element*/
new=malloc(sizeof(*new));
for (i=0;i<3;i++)
{
printf("x : ");
scanf("%d",&new->x);
new->next=NULL;
previous = ad; /*'previous' receives adresse of head of list*/
current = *previous;
while(current != NULL) /*Look for last element of list*/
{
previous = &(current->next);
current = current->next;
}
new->next = *previous;
*previous = new;
}
}
其余代码:
void display_(leo *hl)
{
while (hl)
{
printf("%d -> ",hl->x);
hl=hl->next;
}
}
int main()
{
leo * head;
head = NULL;
add(&head);
display_(head);
return 0;
}
问题是在创建链表(此处包含3个整数的列表)后,它始终只包含最后输入的数字。并且当显示结果时是相同所述数字的无限循环。很感激帮助。
答案 0 :(得分:2)
您只需为您添加的每个元素分配一个class UserByEmailField(forms.ModelChoiceField):
def validate(self, value):
# Check e-mail is valid
# Check user already exists or populate from LDAP
def to_python(self, value):
# Return CodeUser instance
class CodeForm(forms.ModelForm):
class Meta:
fields = ['custodian']
field_classes = {'custodian' : UserByEmailField}
并使用相同的一个CodeUser
。您需要为列表中的每个元素分配一个新元素。
答案 1 :(得分:0)
您似乎尝试将链接条目信息与特定数据信息/类型组合在一起。通常链接列表的东西。然后实际的询问代码将很容易编写。使用链接列表创建列表的代码很简单。
您的链接列表条目结构应如下所示(通过本书):
typedef struct{
void* prev;
void* data;
void* next;
}link_entry;
构建有关该结构的代码 - 它将使生活更轻松。每次想要查询数据时都需要进行演员表,但这会使你的代码变得更加容易。
typedef struct
{
void* first;
void* last;
int n;
} LLst;
一些简单的功能:
LList create()
{
return(calloc(sizeof(LList));
}
list_entry* add_entry(LList* list, void* data)
{
list_entry* entry = malloc(sizeof(list_entry);
entry->prev = list->last;
entry->data = data;
entry->next = NULL;
list->last=entry;
if(!list->first) list->first=list->last;
list->n++;
return entry;
}
void del_entry(LList* list, list_entry* entry)
{
/* you may wish to add a free data client procedure to free the data as well */
list->last=entry->prev;
if(entry) free(entry);
list->n--;
if(!list->n) list->first=list->last=NULL;
return entry;
}