C ++ - 从单链接循环列表中的任何索引中删除节点

时间:2015-04-08 12:09:34

标签: c++

我正在为我的大学作业编写一个循环列表类,我需要实现一个从循环链表中删除给定索引处的节点并返回指向该节点的指针的函数。

这是我的节点类。所有功能都可以正常工作。

struct Node
{    
    int nData;
    Node* next;

    Node(); // Null Constructor
    Node(int data); // Parameterized Constructor
    Node(Node& newNode); // Copy constructor
    ~Node(); // Destructor
    Node& Print(); // display function
};

这是我的节点删除功能。

Node* CCircleList::removeAt(int index) // remove node at specified index
{
    if (index < 0)
    {
        index = 0;
    }
    if (index == 0)
    {
        return remove();
    }
    else if (index >= count)
    {
        demoteIndex(); // tail points to it's predecessor
        Node* ptr = tail->next;
        tail->next = ptr->next;
        ptr->next = NULL;
        setPosition(0);
        return ptr;
    }
    else if (index = (count - 1))
    {
        promoteIndex(); // tail points to tail->next
        setPosition(index - 1); // sets Node pointer current to index
        Node* ptr = current->next;
        promoteIndex();
        current->next = ptr->next;
        ptr->next = NULL;
        return ptr;
    }
    else
    {
        setPosition(index - 1);
        Node* ptr = current->next;
        current->next = ptr->next;
        ptr->next = NULL;
        return ptr;
    }
}

count =列表中的节点数。

tail =列表中的最后一个节点。

tail-&gt; next =列表中的第一个节点。

该功能适用​​于除count-1之外的所有索引,任何帮助都将受到赞赏。提前谢谢。


其他功能代码

CCircleList& CCircleList::promoteIndex() // tail points to it's successor
{
    if (!tail) return *this;
    tail = tail->next;
    return *this;
}
CCircleList& CCircleList::demoteIndex() // tail points to it's predecessor
{
    if (!tail) return *this;

    for (int i = 1; i <= count - 1; i++)
    {
        tail = tail->next;
    }

    return *this;
}
CCircleList& CCircleList::setPosition(int index) // set current to specified index
{
    if (index < 0) index = 0;
    if (index >= count) index = count - 1;

    current = tail->next;

    for (int i = 0; i < index; ++i)
    {
        current = current->next;
    }

    return *this;
}

1 个答案:

答案 0 :(得分:1)

而不是

else if (index = (count - 1))

else if (index == (count - 1))