如何检查链表是否为空

时间:2015-04-21 16:39:04

标签: c++ class pointers linked-list

我正在制作一个项目,我需要将产品添加到链接列表中。当我添加产品时,它还将初始化值计为产品。在我的代码中,我添加了产品" aaaa"价格20和" bbbb"价格111,当我打印产品价格打印时:" 0 20 111"。价值" 0"是初始值,我没有保存它的程序。我需要找出列表是否为空,如果是,则将第一项添加到列表中。我该怎么做?

这是我的代码:

main.cpp中:

#include <iostream> 
//#include <string>
using namespace std;
#include "List.h"
int main(){
    int option;
    Product productsListHead;
    productsListHead.printProducts(&productsListHead);
    productsListHead.addProduct(&productsListHead,1,"aaaa",20);
    productsListHead.printProducts(&productsListHead);
    productsListHead.addProduct(&productsListHead,2,"bbbb",111);
    if(option==1){
        productsListHead.printProducts(&productsListHead);
    }
    return 1;
}

List.cpp:

#include <iostream>
#include <string>
#include <cstdlib>
#include "List.h"
using namespace std;

    void Product::addProduct(Product* head,int id,char* name, int price){
        Product* TheNewProduct = new Product;
        TheNewProduct->setNext(NULL);
        TheNewProduct->setId(id);
        TheNewProduct->setName(name);
        TheNewProduct->setPrice(price);
        Product *tmp = head;

        if ( tmp != NULL ) 
        {
            cout<<"the list is not empty"<<endl;
        // Nodes already present in the list
        // Parse to end of list
            while ( tmp->Next() != NULL ) {
                tmp = tmp->Next();
            }

            // Point the last node to the new node
            tmp->setNext(TheNewProduct);
        }
        else
        {
            cout<<"the list is empty"<<endl;
            // First node in the list
            head = TheNewProduct;
        }
    }
    void Product::printProducts(Product* head)
    {
        //Product* tmp=head;
        for ( ; head; head = head->Next() )
      {
          cout << head->Price() << endl;
      }
    }
    Product::Product(){
        next=NULL;
        id=0;
        name="";
        price=0;
    }

header files-&gt; List.h:

#pragma once
#ifndef LIST_H
#define LIST_H

//#include <string>
using namespace std;

class Product{
    private:
        int id;
        char* name;
        int price;
        Product* next;
    public:
        Product();//constructor
        //Product* Next(){return next;};
        //~Products();
        Product* Next() { return next; };
        int Id(){return id;};
        char* Name(){return name;};
        int Price(){return price;};

        void setId(int new_id){id=new_id;};
        void setPrice(int new_price){price=new_price;};
        void setNext(Product* new_next){next=new_next;};
        void setName(char* new_name){name=new_name;};
        void printProducts(Product* head);
        void addProduct(Product* head,int id, char* name, int price);
        //void updateNameProduct(int id, char* oldName, char* newName); 
    };
#endif

2 个答案:

答案 0 :(得分:3)

链接列表在不包含节点时为空。通常,您通过指向列表的第一个节点的指针访问链接列表。如果没有节点,则头指针为空,列表为空。

答案 1 :(得分:1)

看起来你出于某种原因编写了自己的链表,可能是作业?

当它Product* next为空时,您可能只是指向this。因此,如果next == this,则列表为空。或者,如果List的头节点为null,则列表为空。

将来我建议您从Product代码中拆分链接列表实现。您应该能够List<Product>而不是Product同时成为列表和其他内容。