3

假设我有一个包含以下内容的链表:

1、2、4、5、6、2、3、2

现在可以说我希望将其转换为:

1, 10, 2, 4, 5, 6, 10, 2, 3, 10, 2

即在所有 2 之前插入 10。

我该怎么做?

4

4 回答 4

9

在我的头顶

for (std::list<int>::iterator i = l.begin(); i != l.end(); ++i)
  if (*i == 2)
     l.insert(i, 10);

很简单。您无需担心迭代器失效,因为inserton astd::list不会使任何迭代器失效。这是使用std::list.

于 2012-08-31T10:11:12.470 回答
1

也许是这样的:

auto it = l.begin();
while ((it = std::find(it, l.end(), 2)) != l.end())
{
    it = l.insert(it, 10);
    std::advance(it, 2);
}
于 2012-08-31T10:14:36.307 回答
0

创建一个带有节点和信息的结构,例如

struct test{

int info;
int *node;

}

您可以将它们称为 test->info 和 test->node

现在尝试这样的事情。

while(end_of_list){

list[index]=2;

create a new structure object(new_struct) .

new_struct->info=10;
new_struct->node=node_containing_2.

previous_node_to_2->node=new_struct.

}
于 2012-08-31T10:25:32.450 回答
-1
while(item != NULL)
{
if(item->intval == 2)
{
Item *newitem = (Item *) malloc(sizeof(Item));
newitem->intval = 10;
prev->next = newitem;
newitem->next = item;
}
prev = item;
item = item->next;
}

如果您制作了自己的链表。还掉了我的头,和c风格。

于 2012-08-31T10:15:21.807 回答