2012-06-03 77 views
2

我需要从链表中删除元件,其中该元件的地址given.Something这样删除的特定元素(没有访问列表的报头)

1-> 2-> 3-> 4-> 5 A1 A2 A3 A4 A5其中a1,a2..a5分别元件1,2 ..5的地址。 sum1只是说删除(a3)N,因为我没有访问给定列表的标题。 我不能遍历整个链表,并将地址与被问询的地址进行比较。

问题是我如何删除从给定的列表中的特定元素与给定的任何其他信息。

回答

3

经典面试问题。

你不删除元素,但复制的下一个元素进去:

所以你做的事:

  • A3 = A4
  • 删除A4
+0

A. @OliCharlesworth你是对的。 –

+0

@OliCharlesworth你是对的,不需要复制全部。谢谢。 –

+0

B. @Luchian你也应该知道,如果这是最后一个元素,你的方式将不会工作。 –

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; 
} 
:只有当你没有收到该列表的最后一个值工作210
+0

是的,对于最后一个不适用。 +1 –

0

出于以下两个原因:

  • 您没有获得2->未来。这意味着你不能只是简单地删除元素3
  • 处理列表就像一个数组的前提是你的名单很长一个坏主意。

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

  1. 分配a4至A3(SO 2->下是a4和新A3->下一= A5)。
  2. 删除旧的A4

希望有所帮助。

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;