我需要从链表中删除元件,其中该元件的地址given.Something这样删除的特定元素(没有访问列表的报头)
1-> 2-> 3-> 4-> 5 A1 A2 A3 A4 A5其中a1,a2..a5分别元件1,2 ..5的地址。 sum1只是说删除(a3)N,因为我没有访问给定列表的标题。 我不能遍历整个链表,并将地址与被问询的地址进行比较。
问题是我如何删除从给定的列表中的特定元素与给定的任何其他信息。
我需要从链表中删除元件,其中该元件的地址given.Something这样删除的特定元素(没有访问列表的报头)
1-> 2-> 3-> 4-> 5 A1 A2 A3 A4 A5其中a1,a2..a5分别元件1,2 ..5的地址。 sum1只是说删除(a3)N,因为我没有访问给定列表的标题。 我不能遍历整个链表,并将地址与被问询的地址进行比较。
问题是我如何删除从给定的列表中的特定元素与给定的任何其他信息。
经典面试问题。
你不删除元素,但复制的下一个元素进去:
所以你做的事:
这样可以
void delete(pointerType x)
{
if (x->next == null) return;//this algorithm won't work
//in any other case:
x->value = x->next->value;
pointerType toDelete = x->next;
x->next = x->next->next;
delete toDelete;
}
:只有当你没有收到该列表的最后一个值工作210
是的,对于最后一个不适用。 +1 –
出于以下两个原因:
你必须在局部范围内工作。我在话的解决方案是:
希望有所帮助。
as you don't have header of list you can't traverse list
but you are provided with node to delete
so you can copy next node into it and delete next node
suppose a1 -> to delete
if(a1 && a1->next)
{
a1=a2;
delete a1;
}
else if(a1)
{
delete a1;
}
else
return NULL;
A. @OliCharlesworth你是对的。 –
@OliCharlesworth你是对的,不需要复制全部。谢谢。 –
B. @Luchian你也应该知道,如果这是最后一个元素,你的方式将不会工作。 –