首页 > 解决方案 > 链表c ++插入,所有情况都检查但没有任何效果

问题描述

所以我试图制作一个基本的单链表,没有尾巴,并打算使用另一个类“CarObject”将它添加到我的 CarList 中,这基本上是我的链表。唯一的问题是,在写出代码并对其进行测试之后,似乎没有任何东西可以打印/工作,我什至根本没有收到错误。我有点迷茫,不知道我做错了什么。

更新!:假设我们忽略了我的代码,但是你将如何实现一个添加函数到一个链表(没有尾巴)

class CarList
{
    class NodeType{

       friend class CarList;
       private:
         CarObject* data;
         NodeType* next;
     };



    public:
        void addCar(CarObject*);


    private:     
        NodeType *head;



};

void CarList::addCar(CarObject *car){


  NodeType* newNode;
  NodeType* currNode;


  newNode = new NodeType;
  newNode->data = car;
  newNode->next = NULL;

  currNode = head;


  while (currNode != NULL) {
    if (car->getYearModel().lessThan(currNode->data->getYearModel()))
      break;

    currNode = currNode->next;
  }

  newNode->next = currNode;
}

void CarList::print(){

    NodeType* currNode = head;
   while (currNode != NULL) {
    currNode->data->printTheCarInfo();
    currNode = currNode->next;
  }



}

标签: c++algorithmdata-structures

解决方案


您忘记更新next前一个节点的指针:

  NodeType* prevNode = NULL;
  while (currNode != NULL) {
    if (car->getYearModel().lessThan(currNode->data->getYearModel()))
      break;

    prevNode = currNode; //remember the previous node
    currNode = currNode->next;
  }

  newNode->next = currNode;
  if (prevNode)
      prevNode->next = newNode;
  else
      head = newNode; //if there's no previous node - newNode is the new head!

推荐阅读