链表插入

Linked list insertion

本文关键字:插入 链表      更新时间:2023-10-16

EmissonList对象是包含特定信息的节目列表。我寻找的问题出在插入功能中。

class EmissionList {
private:
Emission *head=NULL;
public:
void insert(Emission *aNode);
Emission *getHead() {
    return head;
};
void putHead(Emission *newHead) {
    head=newHead;
    head->next = NULL;
}
void printEmissions();
};

void EmissionList::insert(Emission *aNode) {
Emission *ptr=getHead();
if (head == NULL){
    putHead(aNode);
}else{
    while(ptr!= NULL){
        ptr = ptr->next;
    }
    ptr = aNode;
    ptr->next=NULL;
}}

我正在尝试添加到列表中,但我遇到了问题。

首先,EmissionList 类的设计很糟糕。

尽管如此,该函数可以通过以下方式定义

void EmissionList::insert( Emission *aNode ) 
{
    Emission *current = getHead();
    if ( current == NULL )
    {
        putHead( aNode );
    }
    else
    {
       while ( current->next ) current = current->next;
       aNode->next = current->next;
       current->next = aNode;
    }
}

在代码中,当您设置 ptr = aNode 时,ptr 不是最后一个元素的"下一个",因此原始列表保持不变

我建议你标准::列表,或者,至少

for (Emission **iter = &head ; *iter != NULL ; )
    iter = &((*iter)->next) ;
*iter = aNode ;

这是我迄今为止发现的最简单的插入(最后)。