将列表元素移动到列表末尾的功能无法多次使用

时间:2019-04-25 19:41:20

标签: c++ oop linked-list nodes singly-linked-list

我需要制作一个函数,将单链接列表中的第n个元素移动到列表的末尾。我创建了一些执行此操作的代码,但是如果我再次尝试执行此操作,它将只将所选元素移到末尾,但是先前移动的那个会被删除/消失。我的理论是,它实际上不会更改尾参考。所以我现在卡住了!

ComponentAnimation title = hi.getToolbar().getTitleComponent().createStyleAnimation("Title", 200);
        for (int i = 0; i < tabs.getTabCount(); i++) {
            Component tab = tabs.getTabComponentAt(i);
            if (tab instanceof Container) {
                hi.getAnimationManager().onTitleScrollAnimation((Container)tab, title);
            }
        }

我的输入: 1 2 3 4 5

第一次移动第三个元素后:

1 2 4 5 3

第二次移动第三个element(4):

1 2 5 4

但应该是

1 2 5 3 4

1 个答案:

答案 0 :(得分:0)

我用自己的实现检查了您的代码。您的函数move()运行正常。但是,您不应在代码的第8行中使用“新”字符(如@molbdnilo和@PaulMakenzie突出显示)。但是它不负责这个问题。您的代码的其他部分有问题。

#include<iostream>
using namespace std;

class List
{
    struct Node
    {
        int number;
        Node* next;
    };  

    Node* head;
    Node* tail;

    public:
    List()
    {
        head = NULL;
        tail = NULL;
    }
        void insert(int num)
    {
        Node* temp = new Node();
        temp->number = num;
        temp->next = NULL;

        if (head == NULL)
        {
            head = temp;
            tail = temp;
        }
        else
        {
            Node* point = head;
            while (point->next != NULL)
                point = point->next;

            point->next = temp;
            tail = point->next;
        }
    }
    void display()
    {
        Node* point = head;
        while (point != NULL)
        {
            cout << point->number << " ";
            point = point->next;
        }
    }

    void move(int n)
    {
        if (head == NULL || head->next == NULL)
        {
            return;
        }
        Node *first = head;
        Node *temp;

        for (int i = 1; i < n-1; i++)
        {
            first=first->next;
        }
        temp = first->next;
        first->next=first->next->next;
        temp->next = NULL;

        tail->next = temp;
        tail=temp;
    }
};

int main()
{
    List a;
    a.insert(1);
    a.insert(2);
    a.insert(3);
    a.insert(4);
    a.insert(5);

    a.move(3);
    a.move(3);

    a.display();

}