void removeNode(string sk2) {
nodelist *nodePtr, *previousNode; // keeps the list in memory
if (head->SKU == sk2) {
nodePtr = head->next;
delete head;
head = nodePtr;
} else {
nodePtr = head;
previousNode = NULL;
while (nodePtr != NULL && nodePtr->SKU != sk2) {
previousNode = nodePtr;
nodePtr = nodePtr->next;
}
previousNode->next = nodePtr->next;
delete nodePtr;
}
}
很抱歉,如果它的格式错误,我对这个网站和c ++一般都很新。我似乎无法理解这个链表如何预先形成删除功能。
答案 0 :(得分:0)
在此代码中,它将删除链接列表的节点,该节点的值为sk2
,从调用函数传递。
我已对此发表评论,如果有什么不清楚,请参考,你可以问我:)
void removeNode(string sk2){ // function having string as a argument
nodelist *nodePtr, *previousNode; //keeps the list in memory Variable of type nodelist
// here it is checking with the head of the link list whether that matches with the argument, as all linked list start with the Head
if (head->SKU == sk2){
nodePtr = head->next;
delete head; // if so then delete that node
head = nodePtr; // and reassign the head to new node
}
// if head parameter is not matching
else
{
nodePtr = head;
previousNode = NULL;
// travel up-to the node which has a data as a string passed as argument
while (nodePtr != NULL && nodePtr->SKU != sk2)
{
previousNode = nodePtr;
nodePtr = nodePtr->next;
}
previousNode->next = nodePtr->next;
delete nodePtr; // if found then delete that node
}
}
答案 1 :(得分:0)
您似乎想要删除sk2
为SKU
成员的节点。
第一个if
只是检查head
节点是否是那个节点,如果是,则删除它。
如果没有,那么else块正试图找到它。 nodePtr
是当前要检查的节点,循环条件是:"只要我有一个要检查的节点,它就不是正确的节点"。
所以循环每次只获取->next
元素。此外,循环始终保留前一个节点,因为必须相应地设置->next
字段。
如果循环结束,则会发生以下两种情况之一:
nodePtr
包含正确的节点,它将被删除并且链接以有效的方式恢复nodePtr
是NULL
。然后会发生未定义的行为。