如何在链表中搜索和插入多个节点
How to search and insert multiple nodes in Linked List
我正在尝试搜索节点,其中节点的输出即结果不止一个。所以我正在尝试制作一个新的双向链表并将这些新节点添加到其中。
但是只得到 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;
}
任何一种方案,我可以将所有搜索到的节点添加到一个链表中。
新节点的
- previous应该是已有的搜索结果。
- 下一个应该为空。
对于现有的搜索结果
- next 应该指向新节点。
保留另一个指向搜索结果开头的指针。 Return 此起始节点作为该方法的结果。
试试这个
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;
}
我正在尝试搜索节点,其中节点的输出即结果不止一个。所以我正在尝试制作一个新的双向链表并将这些新节点添加到其中。 但是只得到 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;
}
任何一种方案,我可以将所有搜索到的节点添加到一个链表中。
新节点的
- previous应该是已有的搜索结果。
- 下一个应该为空。
对于现有的搜索结果
- next 应该指向新节点。
保留另一个指向搜索结果开头的指针。 Return 此起始节点作为该方法的结果。
试试这个
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;
}