在第i个位置添加节点

时间:2015-05-09 11:45:00

标签: c++ nodes

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

我将在链接列表的随机位置(0,5和2)添加节点。

这就像在位置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;
}

1 个答案:

答案 0 :(得分:0)

由于我未解决您的问题,您想编写将在指定索引处设置节点值的函数,如果索引大于列表的当前大小,它将自动扩展您的列表。 (如果我错了,请纠正我)

这很容易。您需要遍历列表,而计数器pymc(请参阅下面的代码)小于指定的位置。如果list小于您创建节点并将其值标记为某个特定值i。当counter等于position时,则将node的值设置为EMPTY

value

同样在你的代码中,打印功能出现了错误:

  1. 您更改了#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; } 变量。
  2. 由于head循环中的条件,未打印列表的最后一个值。