将节点插入链表只会转到开头或结尾



我对这段代码感到困惑。我想将名为"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更少的时间运行循环。

相关内容

最新更新