struct Node {
int data;
Node* next;
};
struct List {
Node* first;
};
void duplicatePositiveNodes(List* list) {
Node* current = new Node();
Node* tmp = new Node();
current = list->first;
while (current != nullptr) {
if (current->data > 0) {
tmp->data = current->data;
tmp->next = current->next;
current->next = tmp;
current = current->next->next;
}
else {
current = current->next;
}
}
Print(list->first);
}
因此,例如,我有一个链接列表->{1,0,-2,3,-4},我想收到这个列表->{1,1,0,-2,3,3,-4}。
使用我当前的代码,我正在接收{1,3,-4}
调试后,我意识到问题出在这段代码的第二次迭代中(我想,我把指针等搞砸了(
tmp->next = current->next;
current->next = tmp;
谢谢你的帮助(
您的代码中存在许多问题。使用调试器进行调试是一种很好的方法,可以找出代码在哪里没有达到预期效果。
这里有一种根据需要复制节点的简单方法:
void duplicatePositiveNodes(List* list)
{
for(auto current = list->first; current; current = current-> next)
if (current->data > 0)
{
current->next = new Node{current->data, current->next};
current = current->next; // to avoid infinite duplicates
}
Print(list->first);
}