2

我需要从给出该元素地址的链表中删除一个元素。像这样

1->2->3->4->5 a1 a2 a3 a4 a5 其中 a1,a2..a5 分别是元素 1,2 ..5 的地址。sum1 只是说 delete(a3) N 因为我无法访问给定列表的标题。我无法遍历整个链表并将地址与询问的地址进行比较。

问题是我如何在没有给出其他信息的情况下从给定列表中删除特定元素。

4

4 回答 4

3

经典面试题。

您不会删除该元素,而是将下一个元素复制到其中:

所以你也是:

  • a3 = a4
  • 删除 a4
于 2012-06-03T10:53:54.113 回答
1

这只有在您没有收到列表的最后一个值时才有效:

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;
}
于 2012-06-03T10:59:10.787 回答
0

出于以下两个原因:

  • 您无权访问 2->next。这意味着您不能简单地删除元素 3。
  • 如果您的列表非常长,则将列表视为数组是一个坏主意。

你必须在局部范围内工作。我的文字解决方案是:

  1. 将 a4 分配给 a3(所以 2->next 是 a4,新的 a3->next = a5)。
  2. 删除旧的a4

希望有帮助。

于 2012-06-03T11:07:28.687 回答
0
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;
于 2012-09-14T05:35:07.167 回答