带有多个参数的链接列表问题

时间:2017-04-20 03:34:45

标签: c++ node.js linked-list sortedlist

所以我试图根据节点的位置(整数),然后按日期(年和月)对节点进行排序。当我使用我的重载运算符来打印我的链表时,它显示列表只插入一个所需节点,这意味着我的插入函数不正确。它没有给出任何错误,它只是没有按预期运行。我的插入功能如下。有没有人对什么是错的有任何想法?

void LinkedList::insert(int location, int year, int month, double temperature) {
// Implement this function
Node* newNode = new Node();
newNode->loc = location;
newNode->yr = year;
newNode->mo = month;
newNode->temp = temperature;
Node* tempNode = head;
Node* previousNode = nullptr;

if(tail == nullptr & head == nullptr){
    head = newNode;
}
while(tempNode != nullptr){
    if((tempNode->loc == newNode->loc) && (tempNode->yr == newNode->yr)){
        if(tempNode->mo > newNode->mo){
            newNode->next = tempNode->next;
            tempNode->next = newNode;
        }
        if(tempNode->mo < newNode->mo){
            newNode->next = tempNode;
        }
    }
    if(tempNode->loc > newNode->loc){
        newNode->next = tempNode->next;
        tempNode->next = newNode;
    }
    if(tempNode->loc < newNode->loc){
        newNode->next = tempNode->next;
        tempNode->next = newNode;
    }
    tempNode = tempNode->next;
}

}

1 个答案:

答案 0 :(得分:0)

您没有正确获取链接列表的原因是因为您在指针操作中出错。当您指定cur->next=data->next;时 您基本上打破了列表,因为data->next 指向列表中的下一个节点。 另请注意,由于这是单个链表[意味着它只有一个指针前进],因此只能在当前节点之前插入节点。 尝试这样的事情:

if (cur->loc > data->loc) { data->next = cur->next; // This will insert data in middle of cur->next = data; // cur and cur->next }

如果要按递增或递减顺序插入,则需要执行多项检查。 插入列表的第一个元素时插入不同的情况,插入头部,插入尾部并插入链接列表的中间。
此外,在尾节点确保其下一个始终设置为null。