【发布时间】:2013-09-24 06:02:36
【问题描述】:
我在链接列表中插入项目时遇到问题。所有元素最终都具有最后插入的相同 *data 内容。程序编译成功。我使用 gcc 和 gdb。 我是编码新手,所以如果您在我的编程风格中看到任何麻烦,请提及。
typedef struct Node{
void* data;
struct Node* next;
} *node;
node allocate(){
node current = malloc(sizeof(struct Node));
current->data = NULL;
current->next = NULL;
return current;
}
void insert(node *head, void *data){
// if head has no data then set the data on head and return
if(((*head)->data == NULL)&&((*head)->next == NULL)){
(*head)->data = data;
return;
}
node newHead = allocate();
newHead->data = data;
newHead->next = *head;
*head = newHead;
//printf("Node Data : %d\tNext Node Data : %d",
//*(int *)((*head)->data), *(int *)((*head)->data));
}
int main(int argc, char *argv[]){
node head = allocate();
int count = inputSequence(&head);
int *aod = calloc((size_t) count, sizeof(int));
generateAOD(head, aod);
if(checkJolly(aod, count) == TRUE)
printf("Jolly\n");
else
printf("Not Jolly\n");
return 0;
}
int inputSequence(node *input){
int *num = malloc(sizeof(int));
int count = 0;
while((scanf("%d", num) != EOF)){
insert(input, (void *)num);
count++;
}
traverse(*input, fn);
return count;
}
【问题讨论】:
-
你有
main函数的代码吗? -
是的。我已经将主要功能和链接列表模块实际上放在不同的文件中
-
@lc2817 .. 我可以在 stackoverflow 上上传文件还是可以通过电子邮件发送它们?
-
我在顶部看到的一个问题是,在确定列表是否为“空”时,您正在使用
data成员状态为非空的预分配头指针。绝对没有理由这样做。头指针本身(null vs. not-null)是“空”状态的更清晰的指示器。第二。您永远不会在insert()函数中分配新节点,因此当然不会发生“插入”。 -
在您的其他代码下方添加主文件。谢谢
标签: c coding-style singly-linked-list