C++ 如何在链表中搜索和插入多个节点

C++ 如何在链表中搜索和插入多个节点,c++,visual-studio-2013,linked-list,doubly-linked-list,C++,Visual Studio 2013,Linked List,Doubly Linked List,我试图搜索节点,其中输出即节点的结果不止一个。因此,我尝试创建一个新的双链接列表,并将这些新节点添加到其中。 然而只得到1个正确的结果,第二个给我的地址或那个节点或是错误的。如图所示 我的代码: Order::Node* Order::searchByDate(string date) { Node* cur = head; Node* node = NULL; cout << "\nSearching " << endl; Sleep(

我试图搜索节点,其中输出即节点的结果不止一个。因此,我尝试创建一个新的双链接列表,并将这些新节点添加到其中。 然而只得到1个正确的结果,第二个给我的地址或那个节点或是错误的。如图所示

我的代码:

Order::Node* Order::searchByDate(string date) {
    Node* cur = head;
    Node* node = NULL;
    cout << "\nSearching " << endl;
    Sleep(400);

    while (cur != NULL) {
        if (cur->date == date) {
            //create new node
            Node* newNode = new Node;
            newNode->prev = NULL;
            newNode->next = cur;
            //copy newNode to node(new linked list having all search result)
            node = newNode;
            node->prev = newNode;
            node = newNode;
            Sleep(400);
        }

        cur = cur->next;
    }
    return node;
}
Order::Node*Order::searchByDate(字符串日期){
节点*cur=头部;
Node*Node=NULL;
cout-prev=NULL;
newNode->next=cur;
//将新节点复制到节点(具有所有搜索结果的新链表)
node=newNode;
node->prev=newNode;
node=newNode;
睡眠(400);
}
cur=cur->next;
}
返回节点;
}
显示功能:

Node* cur = searchByDate(date);
while (cur != NULL) {
    cout << cur->orderid << "\t\t" << cur->date << "\t" << cur->cust.custId << endl;
    cur = cur->next;
}
Node*cur=searchByDate(日期);
while(cur!=NULL){
cout orderid新节点的

  • 以前的搜索结果应该是现有的搜索结果
  • next应该为null
对于现有的搜索结果

  • 下一步应该指向新节点
保留另一个指向搜索结果开始的指针。将此开始节点作为方法的结果返回

试试这个

Order::Node* Order::searchByDate(string date) {
    Node* cur = head;
    Node* node = NULL;
    Node* start = NULL;

    while (cur != NULL) {
        if (cur->date == date) {

            //make a new node
            Node* newNode = new Node(cur->date);
            newNode->prev = NULL; //explicitly set to NULL
            newNode->next = NULL; //explicitly set to NULL

            if (node == NULL) {
                //very first node
                node = newNode;
                start = node;
            }
            else {
                //append new node to existing nodes
                //see diagram below
                node->next = newNode;
                newNode->prev = node;
                node = newNode;
            }
        }

        cur = cur->next;
    }
    return start;
}

新节点的

  • 以前的搜索结果应该是现有的搜索结果
  • next应该为null
对于现有的搜索结果

  • 下一步应该指向新节点
保留另一个指向搜索结果开始的指针。将此开始节点作为方法的结果返回

试试这个

Order::Node* Order::searchByDate(string date) {
    Node* cur = head;
    Node* node = NULL;
    Node* start = NULL;

    while (cur != NULL) {
        if (cur->date == date) {

            //make a new node
            Node* newNode = new Node(cur->date);
            newNode->prev = NULL; //explicitly set to NULL
            newNode->next = NULL; //explicitly set to NULL

            if (node == NULL) {
                //very first node
                node = newNode;
                start = node;
            }
            else {
                //append new node to existing nodes
                //see diagram below
                node->next = newNode;
                newNode->prev = node;
                node = newNode;
            }
        }

        cur = cur->next;
    }
    return start;
}

为什么睡觉(400)?为什么睡觉(400)?你是如何制作这样好的图表的?是的,现在它可以工作了。我做了一个小小的改变,即
Node*newNode=newNode;newNode->prev=NULL;//显式设置为NULL newNode->next=NULL;//显式设置为NULL newNode=cur;
Thankyou@V-R Visio或openoffice的绘图工具可能是候选工具。@V-R(),而且制作图表非常简单快捷,我不想安装Visio等:)你是如何制作这么好的图表的?是的,现在它可以工作了。我做了一个小小的改变,即
Node*newNode=newNode;newNode->prev=NULL;//显式设置为NULL newNode->next=NULL;//显式设置为NULL newNode=cur;
谢谢you@V-R Visio或者openoffice的draw实用程序可能是候选工具。@V-R yed(),而且制作diagramsBrilliant既简单又快速,所以我不想安装Visio等:)