在ITH位置添加节点

adding node at ith position

本文关键字:节点 添加 位置 ITH      更新时间:2023-10-16

我想创建一个大小为5的链接列表,并在ITH位置添加一些节点。

我将在链接列表的随机位置上添加节点。

这是在位置0中添加节点的样子。

      0
 +---------+
 |    1    |
 +---------+ --> NULL
 |  next   | 
 +---------+ 

这是在位置5处添加节点的样子。

      0             1             2             3             4
 +---------+   +---------+   +---------+   +---------+   +---------+
 |    1    |   |  Empty  |   |  Empty  |   |  Empty  |   |    2    |
 +---------+-------------------------------------------->+---------+-->NULL
 |  next   |   |  node   |   |  node   |   |  node   |   |  next   |
 +---------+   +---------+   +---------+   +---------+   +---------+

因此节点1,2,3为空,0链接到4。

这是在位置1处添加节点的样子。

      0             1             2             3             4 
 +---------+   +---------+   +---------+   +---------+   +---------+
 |    1    |   |    2    |   |  Empty  |   |  Empty  |   |    2    |
 +---------+-->+---------+------------------------------>+---------+-->NULL
 |  next   |   |  next   |   |  node   |   |  node   |   |  next   |
 +---------+   +---------+   +---------+   +---------+   +---------+

因此节点2,3是空的,0链接到1和1链接到4。

我试图实施它,但没有打印任何东西。请指教。谢谢。

#include <iostream>
struct node
{
    int x;
    node *next;
};
node * head = NULL;
node * newNode;
node * temp;
void addNode(int pos, int size)
{
    /*if head is null, initialize a new node
      set data = 1 for head;
    */
    if(head == NULL && pos == 0)
    {
        newNode = new node;
        head = newNode;
        head->x = 1;
        temp = head;
        temp->next=NULL;
    }
    else
    {
        /*
         Adding a node at ith position.
         1. check if the the position is less than the size of the link list.
         2. set the temp position to be 0(head)
         3. use the temp pointer and go to the ith postion.
         4. create new node at ith position.
         5. set data = 2 for the node at ith position.
     */
        if (pos < size)
        {
            for(int i=0; i < size; i++)
            {
                temp = head;
                temp = temp->next;
                if (pos == i)
                {
                    newNode = new node;
                    temp = newNode;
                    temp->x = 2;
                    temp->next = NULL;
                }
            }
        }
    }
}
void Print() {
    while(head->next != NULL)
    {
        std::cout<< head->x << std::endl;
        head=head->next;
    }
}
int main()
{
    int input = 0;
    while (true) {
        std::cout << "1. Add Node and Print " << std::endl;
        std::cin >> input;
        switch ( input ) {
            case 1:
                addNode(0, 5);
                addNode(5, 5);
                addNode(1, 5);
                Print();
                break;
            default:
                std::cout<<"Bad Input";
                break;
        }
        std::cin.get();
    }
    return 0;
}

当我解开您的问题时,您要编写的函数,该功能将在指定的索引处设置节点的值,并且如果索引的索引大于列表的当前大小,则会自动扩展您的列表。(如果我错了,请纠正我)

这很容易。当计数器i(请参阅下面的代码)小于指定位置时,您需要迭代列表。如果列表比创建节点小,并将其值标记为某些值EMPTY。当计数器等于位置时,然后将节点的值设置为 value

#include <iostream>
struct node {
    int   data;
    node* next;
};
#define EMPTY -1
node * head = NULL;
void setNode(int pos, int value) {
    if(head == NULL) {
        head = new node;
        head->data = EMPTY;
        head->next = NULL;
    }
    node* p = head;
    for(int i = 0; i < pos; i++) {
        if(p->next == NULL) {
            p->next = new node;
            p->next->data = EMPTY;
            p->next->next = NULL;
        }
        p = p->next;
    }
    p->data = value;
}
void print() {
    node* p = head;
    while(p != NULL) {
        std::cout << p->data << " ";
        p = p->next;
    }
    std::cout << std::endl;
}
int main() {
    setNode(0, 1);
    setNode(5, 2);
    setNode(1, 3);
    print();
    return 0;
}

在您的代码中,印刷功能中也存在错误:

  1. 您更改了head变量。
  2. 和列表的最后值未打印,因为while循环中的条件。