我正在制作一个项目,我需要将产品添加到链接列表中。当我添加产品时,它还将初始化值计为产品。在我的代码中,我添加了产品" 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
答案 0 :(得分:3)
链接列表在不包含节点时为空。通常,您通过指向列表的第一个节点的指针访问链接列表。如果没有节点,则头指针为空,列表为空。
答案 1 :(得分:1)
看起来你出于某种原因编写了自己的链表,可能是作业?
当它Product* next
为空时,您可能只是指向this
。因此,如果next == this
,则列表为空。或者,如果List的头节点为null
,则列表为空。
将来我建议您从Product
代码中拆分链接列表实现。您应该能够List<Product>
而不是Product
同时成为列表和其他内容。