【发布时间】:2014-11-26 18:46:12
【问题描述】:
我有一个用 C 语言编写的程序,它创建一个由两部分组成的单链表。
我使用结构来生成列表、节点和节点数据。
其中结构被定义为
struct TList {
struct LNode* first;
struct LNode* last_left;
};
struct LNode {
struct LData* data;
struct LNode* next;
};
列表看起来像[ A B C ][ D E ]
在哪里,
list->first = "A" 和 list->last_left = "C"
以下函数重置链表中的光标。
void reset_list_cursor(struct TList *list) {
struct LNode *temp, *temp1, *temp2;
int i = (list_left_size(list) - 1 );
for (i; i >= 0; i--) {
temp = list->last_left;
temp1 = list->first;
if (temp != NULL) {
temp2 = temp1->next;
while (temp2 != temp) {
temp1 = temp1->next;
temp2 = temp2->next;
}
list->last_left = temp1;
}
}
list->last_left = NULL;
}
但是,我遇到了分段错误,我已将其范围缩小到以下几行...
void reset_list_cursor(struct TList *list) {
temp1 = temp1->next;
temp2 = temp2->next;
我知道你永远不能调用 temp = temp->next->next,但是当你创建一个结构来代替 temp->next 时,它不应该工作吗?
【问题讨论】:
-
如果
temp和temp->next不为 NULL(或更准确地说,已知为有效),temp = temp->next->next;在语法上是有效且安全的。 -
这意味着您取消了对
NULL的引用。先不要检查NULL,你可以避免它。 -
MCVE 会很有帮助。
标签: c pointers linked-list structure