我对这段代码感到困惑。我希望在带有“James”的节点之后将名为“Joshua”的节点插入到我的链接列表中。但是,我错了,它只是根据“insert(”Joshua“,2)中的整数值将它添加到列表的开头或结尾;”
#include <string>
#include <iostream>
using namespace std;
struct Node
{
string name;
Node *link;
};
typedef Node* NodePtr;
NodePtr listPtr, tempPtr;
void insert(string name, int n)
{
NodePtr temp1 = new Node();
temp1->name = name;
temp1->link = NULL;
if(n == 1){
temp1->link = listPtr;
listPtr = temp1;
return;
}
NodePtr temp2 = listPtr;
for(int i = 0; i < n; i++){
temp2 = temp2->link;
}
temp1->link = temp2->link;
temp2->link = temp1;
}
void print()
{
NodePtr temp = listPtr;
while(temp != NULL)
{
cout << temp->name << endl;
temp = temp->link;
}
}
/*
*
*/
int main(int argc, char** argv){
listPtr = new Node;
listPtr->name = "Emily";
tempPtr = new Node;
tempPtr->name = "James";
listPtr->link = tempPtr;
tempPtr->link = new Node;
tempPtr = tempPtr->link;
tempPtr->name = "Joules";
tempPtr->link = NULL;
print();
insert("Joshua", 2);
cout << endl;
print();
return 0;
}
答案 0 :(得分:0)
for(int i = 0; i < n; i++){
temp2 = temp2->link;
}
如果n=2
并且您在链接列表中有3
个元素,则在上面的循环结束时,您将位于最后一个节点。然后,下面将添加新节点
temp1->link = temp2->link;
temp2->link = temp1;
您希望循环1
的时间更少。