【问题标题】:How to search and insert multiple nodes in Linked List如何在链表中搜索和插入多个节点
【发布时间】:2017-01-16 18:52:14
【问题描述】:

我正在尝试搜索节点,其中输出即节点的结果不止一个。所以我正在尝试创建一个新的双向链表并将这些新节点添加到其中。 但是只得到 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;
}

显示功能:

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

我可以将所有搜索到的节点添加到一个链表中的任何解决方案。

【问题讨论】:

  • 为什么是 Sleep(400)?

标签: c++ visual-studio-2013 linked-list doubly-linked-list


【解决方案1】:

新节点的

  • previous 应该是现有的搜索结果。
  • next 应该为空。

对于现有的搜索结果

  • next 应该指向新节点。

保留另一个指向搜索结果开头的指针。返回此起始节点作为方法的结果。

试试这个

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;
}

【讨论】:

  • 你是怎么做出这么漂亮的图表的?
  • 是的,现在可以了。我做了一点改动,即Node* newNode = new Node; newNode-&gt;prev = NULL; //explicitly set to NULL newNode-&gt;next = NULL; //explicitly set to NULL newNode = cur;谢谢
  • @V-R Visio 或 openoffice 的绘图实用程序可能是候选者。
  • @V-R yed (yworks.com/products/yed),制作图表既简单又快捷
  • 太棒了,我不想安装 Visio 等 :)
猜你喜欢
  • 1970-01-01
  • 2018-08-30
  • 1970-01-01
  • 2018-04-19
  • 2018-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多