如何从单个链表中删除节点(两个节点之间)而不将任何参数传递给类函数?
例如,我有一个包含一个头节点的6个节点的列表,我想从类函数中删除其中两个节点(事先不知道它们的地址或位置),我该怎么做?
void WordList::deleteNode(){
Node *temp;
temp=head;
if(temp->count<=10)
{
//delete this node... not sure how though
}
else
temp=temp->next;
}
其中WordList是我的类,Node是我的结构,它包含一个单词,一个计数和一个指针。 我想删除任何计数器为10或更少的节点。
答案 0 :(得分:2)
我觉得这个问题太混乱了。
从列表中删除节点总是基于某些标准,例如元素的内容,元素的位置等(除非你删除列表中的所有元素)
答案 1 :(得分:2)
类似的东西:
void WordList::deleteNode(){
Node *prev=NULL;
temp=head;
bool done=false;
while (!done)
{
if (temp->count<=10)
{
if (prev == NULL)
{
head = temp->next;
} else
{
prev->next = temp->next;
}
// delete data in temp, and the node if necessary
temp = temp->next;
done = (temp==NULL) || // some other condition, like deleted 2
} else
{
prev=temp;
temp = temp->next;
done = (temp==NULL);
}
}
答案 2 :(得分:2)
您的编辑有先前信息,该位表示“counter&lt; = 10”: - )
用于删除在单链表中符合该条件的元素的伪代码:
def delLessThanTen:
# Delete heads meeting criteria, stop when list empty.
while head != NULL and head->count <= 10:
temp = head->next
free head
head = temp
if head == NULL:
return
# Head exists, with count > 10, process starting there (we check
# NEXT element for criteria then delete if met).
ptr = head
while ptr->next != NULL:
# If next in list meets criteria, delete it, otherwise advance.
if ptr->next->count <= 10:
temp = ptr->next->next
free ptr->next
ptr->next = temp
else:
ptr = ptr->next
return
答案 3 :(得分:1)
将前一个变量初始化为null。如果删除节点,则更改元素下一个节点旁边的前一个节点,除非前一个为空(您位于列表的开头),当您保留前一个空值并将root更改为已删除元素的下一个节点时。如果不删除元素,请在元素之前进行更改。
这里的前一个元素总是指向上一个元素,如果你在列表的开头,则为null。
void WordList::deleteNode() {
Node *temp = head;
Node *previous = null;
while (temp != null) {
if(temp->count <= 10) {
// delete node
if (previous == null) {
// there is no previous node, so point head of list past the current node
head = temp->next;
} else {
// there is a previous node, so just point it past the current node
previous->next = temp->next;
}
} else {
// not deleting, so set previous to temp
previous = temp;
}
temp = temp->next;
}
}