我对这段代码感到困惑。我想将名为"Joshua"的节点插入到带有"James"的节点之后的链表中。但是,我弄错了,它只是根据"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;
}
for(int i = 0; i < n; i++){
temp2 = temp2->link;
}
如果n=2
并且链表中有3
个元素,则在上述循环结束时,您将位于最后一个节点。然后下面将在末尾添加新节点。
temp1->link = temp2->link;
temp2->link = temp1;
您希望1
更少的时间运行循环。