您循环直到checkPt
为NULL
你可以看到这个:
O1 --> O2 --> 03 --> ... --> On --> NULL
所以,checkPt
是空的,当你创建对象并checkPt
指向时,没问题。
问题是:on 现在不是指向 checkPt。它仍然指向NULL。(意思是:什么都没有)。
所以,你应该追踪到最后一个节点(在这种情况下是On
),并创建新对象,并使这个 lastNode 指向。
这是我的示例代码:
struct checkPoints *tailPoint = *checkPoint;
while (tailPoint->next != NULL) {
tailPoint = tailPoint->next;
}
struct checkPoints *newPoints = malloc(sizeof (struct checkPoints));
// modify newPoints here
newPoints->next = NULL; // mark it as last node
tail->next = newPoint; // now, mark you last node point to new node. and new node point to end --> NICE
如您所见,我的代码有一个简单的不同点:我跟踪直到tailPoint->next
为 NULL,所以我仍然保留最后一个元素,但在您的代码中,什么都没有。这是一个很大的区别。
正如 simonce 评论的那样,如果 checkPoint 为空,我的代码将失败:通常当列表中没有任何内容时。所以,这里是修改后的代码:
// i'm create newPoint first, because always need new points. this will make the code less redundant.
struct checkPoints *tailPoint = *checkPoint;
struct checkPoints *newPoint = malloc(sizeof (struct checkPoints));
// modified newPoint here
// newPoint always last node, so, it will point to NULL.
newPoint->next = NULL;
if (checkPoint== NULL) {
*checkPoint = newItem; // base on new idea
}
else {
while (tailPoint->next != NULL) {
tailPoint = tailPoint->next;
}
tailPoint->next = newItem; // as upper code, add last node to tailPoint.
}
您应该注意到两种情况之间的不同:分配newItem
给checkPoint
(链表的第一个节点)和tailPoint
(链表的最后一个节点)希望这有帮助:)