假设我有一个包含以下内容的链表:
1,2,4,5,6,2,3,2
现在可以说我希望将其转换为:
1,10,2,4,5,6,10,2,3,10,2
即。在所有2之前插入10。
我该怎么做?
答案 0 :(得分:7)
脱离我的头顶
for (std::list<int>::iterator i = l.begin(); i != l.end(); ++i)
if (*i == 2)
l.insert(i, 10);
足够简单。您不必担心迭代器失效,因为insert
上的std::list
不会使任何迭代器无效。这是使用std::list
的优势之一。
答案 1 :(得分:1)
也许是这样的:
auto it = l.begin();
while ((it = std::find(it, l.end(), 2)) != l.end())
{
it = l.insert(it, 10);
std::advance(it, 2);
}
答案 2 :(得分:0)
创建一个包含节点和信息的结构,如
struct test{
int info;
int *node;
}
您可以将它们称为test-&gt; info和test-&gt; 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.
}
答案 3 :(得分:-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风格。