如何在第一次出现x(线性链表)C ++之后添加新元素y

时间:2017-03-26 11:44:03

标签: c++ linked-list

大家好:)如果我做错了什么,那么请问所有这些新手。 我目前正在做一项任务,而且我已经坚持了很长一段时间。我想要做的是在线性链表中的插入函数(int x,int y)第一次出现元素'x'之后添加一个新元素'y',它使用动态分配内存的节点。 很乐意欣赏任何建议。谢谢您的时间:))

#include <iostream>
using namespace std;
struct node {
    int value;
    node* next;
};
node* list = NULL;
node* first_item = new node();
void print() { 

    node* iterator = list;
    if (iterator == NULL) {
        cout << "EMPTY" << endl;
    }
    while (iterator != NULL)
    {
        cout << iterator->value; // print node value
        if (iterator->next != NULL) {
            cout << " -> ";
        }
        iterator = iterator->next; // progress to next value
    }

    cout << endl;
}
void insert(int y) { // adds a new element y as the first element in the list

    first_item->value = y;
    list = first_item; // point list to first item

}
void insert(int x, int y) {  // adds a new element y after the first occurrence of element x


    first_item->value = x;
    node* second_item = new node(); // a second item
    second_item->value = y;
    second_item->next = first_item->next;
    list->next = second_item;

}

int main()
{
    node* list = NULL;
    print();
    insert(0);
    print();
    insert(0, 1); 

    print();
    insert(1, 3);
    print();
    insert(1, 2);
    print();
    return 0;
}

我得到的错误输出值:

    EMPTY

    0 
    0 -> 1
    1 -> 3 -> 1
    1 -> 2 -> 3 -> 1

我需要的正确价值:

    EMPTY
    0
    0 -> 1
    0 -> 1 -> 3
    0 -> 1 -> 2 -> 3 

1 个答案:

答案 0 :(得分:1)

你有设计问题。

首先,删除全局变量:

#include <iostream>
using namespace std;
struct node {
    int value;
    node* next;
};
node* list = NULL; // This
node* first_item = new node(); // And this

每个函数都应该有一个参数:列表的第一个节点。而已。如果你需要列表的最后一个元素,你应该迭代到最后:

void print(node* list) { 

    node* iterator = list;
    if (iterator == NULL) {
        cout << "EMPTY" << endl;
    }
    while (iterator != NULL)
    {
        cout << iterator->value; // print node value
        if (iterator->next != NULL) {
            cout << " -> ";
        }
        iterator = iterator->next; // progress to next value
    }

    cout << endl;
}
void insert(node* first_item,int y) { // adds a new element y as the first element in the list

    //TODO Implement

}
void insert(int x, int y) {  // adds a new element y after the first occurrence of element x

    //TODO Implement
}

int main()
{
    node* list = NULL;

    print(list);
    insert(list,0);
    print(list);
    insert(0, 1); 

    print(list);
    insert(1, 3);
    print(list);
    insert(1, 2);
    print(list);
    return 0;
}