如何在给定索引之后在链接列表中插入节点

时间:2019-06-10 23:52:10

标签: c++

我试图在链表的给定索引处和结尾处都插入一个节点,但是我不理解语法,甚至在概念上也不知道我在做什么。

对于这两个问题,我都有一个insertTail函数和一个insertAfter函数,但是我不确定我是否正确实现了它们。

void insertTail(T value) {
        if (head == NULL) {
            insertHead(value);
        }
        else {
            T tailNode = Node(value);
            Node* tempPtr = head;
            while (tempPtr != NULL) {
                tempPtr = tempPtr->next;
            }
            next = tailNode->data;
        }

    };

void insertAfter(T value, T insertionNode) {
        Node* tempPtr = head;
        while (tempPtr->data != insertionNode) {
            tempPtr = tempPtr->next;
        }
        Node* afterNode = new Node(value);
        afterNode->next = tempPtr->next;
        tempPtr->next = afterNode;
    };

我的代码甚至无法与我当前的代码一起编译。 else函数中insertTail语句的第一行读取错误

  

“正在初始化”:无法从“ LinkedList :: Node”转换为“ std :: basic_string ,std :: allocator >”

1 个答案:

答案 0 :(得分:1)

您的两个函数都被错误地实现。他们需要看起来像这样(假设正在使用单链接列表):

void insertTail(T value) {
    if (!head) {
        insertHead(value);
    }
    else {
        Node* tailNode = head;
        while (tailNode->next) {
            tailNode = tailNode->next;
        }
        tailNode->next = new Node(value);
    }
}

void insertAfter(T value, Node *insertionNode) {
    if (!insertionNode) {
        insertTail(value);
    }
    else {
        Node* newNode = new Node(value);
        newNode->next = insertionNode->next;
        insertionNode->next = newNode;
    }
}