这是我的列表结构:
typedef struct Header {
struct Header* next;
char empty;
int storageSize;
} Header;
我正在遍历列表以检查它有多少元素:
int listSize(Header* _header) {
int count = 0;
while(_header->next) {
_header = _header->next;
++count;
}
return count;
}
到达列表末尾后我得到了一个段错误。 但是,如果我将其更改为:
int listSize(Header* _header) {
int count = 0;
while(_header->next) {
if(!_header->next) {
_header = _header->next;
++count;
}
else
break;
}
return count;
}
它不会出现段错误,但它显然也不能正确计算元素。
答案 0 :(得分:2)
改变这个:
Θ(n)
到此:
while(_header->next) {
因为您希望遍历列表,只要当前节点不是while(_header) {
。
您遇到了细分错误,因为您试图获取NULL
的{{1}}数据成员。
感觉您正在向您的next
传递空列表,即NULL
为listSize()
,您正试图获取_header
的{{1}}数据成员,因此是分段错误。
答案 1 :(得分:0)
你的逻辑不正确。代码应该是这个 - 并注意评论
int listSize(Header* header) {
int count = 0;
while (header) { // We have a node to count
++count; // Count it
header = header->next; // And move to the next node
}
return count;
}
答案 2 :(得分:-1)
在我看来,只要你想创建一个新节点,就可以将next
初始化为0或*next
为0。