这个链表功能有什么问题?

时间:2012-03-20 20:46:12

标签: c++ linked-list

上下文是L链接列表中的一个。我假设L在开头不是0,并且每个链表都以一个节点作为下一个字段结束。

void g(node*, int, char);
void g(node* L, int k, char y) {
    node* current = L;
    if (current->info == y) k--;
    while (current->next) {
        if (current->next->info == y) {
            if (k > 0) k--;
            else {
                node* very_next = current->next->next;
                delete current->next;
                current->next = very_next;
            }
        }
        current = current->next;
    }
}

我一直在while(current->next)级别收到BAD_ACCESS警告。怎么了?我正在那里访问一个正确的节点,因为测试(!current->next)失败了。那有什么不对?

我正在测试的链表是

node* n = new node('a',new node('b', new node('a', new node('c', new node('a', 0)))));

使用此结构:

struct node {
    char info;
    node* next;
    node(char a = 0, nodo* b = 0) {
        info = a;
        next = b;
    }
};

2 个答案:

答案 0 :(得分:5)

如果current->next->next == very_next = NULL,也不会分配当前NULL,从而使以后访问当前(通过current->next)无效(current = current->next = very_next)?

答案 1 :(得分:3)

你在循环中假设current-> next-> next指向下一个元素可能是错误的,你应该首先检查是否为真。