我想检查一下C ++中的链表是否为空。我有以下课程:
class IntLinkedList
{
private:
struct LinkedListNode // Structure for linked list
{
int value;
struct LinkedListNode *next;
};
LinkedListNode *head; // List head pointer
public:
IntLinkedList(void) // Constructor
{ head = NULL; }
~IntLinkedList(void); // Destructor
void AppendNode(int);
void InsertNode(int);
void DeleteNode(int);
void DisplayList(void);
bool isEmpty(LinkedListNode*);
};
// isEmpty function
bool IntLinkedList::isEmpty(LinkedListNode *node)
{
bool status;
node = head;
if ( node->next == NULL )
status = true;
else
status = false;
return status;
}
但我不能通过同一类的对象在其他类中使用此函数。
如何使用函数检查空列表,该列表可以通过同一个类的对象在另一个类中访问?
答案 0 :(得分:2)
您获得的错误是由于您将函数声明为bool isEmpty(LinkedListNode)
,但您尝试将其定义为bool isEmpty(LinkedListNode*)
。不同之处在于,在定义中你有一个指针,而在声明中只有一个对象。你必须选择一个,因为这些是完全不同的东西。
那就是说,我根本不明白为什么你需要这个论点来检查你的名单是否为空。只需完全删除参数并使用if ( head->next == NULL )
- 总是通过类的实例调用非静态成员函数。
为了完整起见,head
指向列表中的第一项,因此为了检查列表中是否有任何内容,您应检查它是否为空指针:
bool IntLinkedList::isEmpty() const
{ //added const for const-correctness, should be added to declaration as well
return head == nullptr;
}
答案 1 :(得分:0)
关注list.empty()
,
返回列表容器是否为空(即其大小是否为空) 0)。
两个建议:
有size
变量检查列表中的节点数,这样isEmpty()
只是return size == 0;
或者在您当前的实现中,只需修改为:
bool isEmpty() {
return head == null; // if head is null, there's no node in list
}