我的代码(用C编写)有一个部分,在那里它得到了一个链表和一个项。该项被附加到链接列表中,并且我在附加之前和之后检查该项的值。
它显示了一些奇怪的行为,因为第二次尝试追加似乎是为了更改在将元素追加到列表后传递的元素。
调用附加函数的代码部分:
有两种情况:在第一种情况下(breaks==NULL),列表为空。第二,事实并非如此。
if (breaks == NULL){
breaks = createNode(breakstart, breakend);
printf("Headbreaks info:n");
printf("Next: %pn", breaks -> next);
head = breaks;
appendToList(schedule, breaks); //append the break found to schedule list
printf("nBreaks info after append:n");
printf("Next: %p n", breaks -> next);
} else {
breaks -> next = createNode(breakstart, breakend);
breaks = breaks -> next;
printf("Breaks info:n");
printf("Next: %p n", breaks -> next);
appendToList(schedule, breaks); //append the break found to schedule list
printf("nBreaks info after append:n");
printf("Next: %p n", breaks -> next);
i++;
}
附加函数:移动到列表的末尾并将项附加到其中。还有一些打印函数可供一些业余调试使用。
void appendToList(timeblock *list, timeblock* item){
while (list -> next != NULL){
printf("(%d - %d)", list -> start, list -> end);
list = list -> next;
}
printf("nAppend to: (%d - %d)", list -> start, list -> end);
list -> next = item;
}
节点创建:
timeblock* createNode(int start, int end){
timeblock *new = malloc(sizeof(timeblock));
new -> start = start;
new -> end = end;
new -> next = NULL;
return new;
}
输出片段:
Headbreaks info:
Next : 00000000
Headbreaks info after append:
Next : 00000000
Breaks info:
Next : 00000000
Breaks info after append:
Next : 00322438 //I expected it to be null!
据我所知,在第一个代码片段的第二种情况下,部分
breaks -> next = createNode(breakstart, breakend);
breaks = breaks -> next;
// some debug code
appendToList(schedule, breaks);
将一个节点插入到已插入的列表中,该列表的前一个节点指向该节点。