Removing from SList (std.container)...

Roman D. Boiko rb at d-coding.com
Wed Jun 27 13:00:17 PDT 2012


On Wednesday, 27 June 2012 at 19:06:46 UTC, Timon Gehr wrote:
> On 06/27/2012 08:46 PM, Roman D. Boiko wrote:
>> On Wednesday, 27 June 2012 at 18:26:46 UTC, Steven 
>> Schveighoffer wrote:
>>> The thing that makes SList useless is the O(n) removal. 
>>> Nobody will
>>> ever use SList when they can write a replacement that has 
>>> O(1) removal
>>> in 10 minutes.
>> Do you mean something like indexed/sorted dictionary? It 
>> doesn't seem to
>> be that easy to implement. Or some other data structure with 
>> O(1) removal?
>
> O(1) removal works quite ok for a singly linked list. eg:
>
> 1.
> - Add a sentinel node to the start of your list.
> - Represent an iterator into the list as a pointer to the 
> predecessor
>   of the respective node.
> - Removal: trivial. rebind the 'next' reference of the 
> pointed-to node.
>
> 2.
> - Represent the empty list as a sentinel node with null 'next' 
> field.
> - For removal of a node you own a pointer to:
>  -- case 1: the successor is an empty list:
>     - destroy the value, set the 'next' reference to null.
>  -- case 2: else:
>     - move the successor's value into the node that holds the 
> value to
>       be removed, bind the 'next' reference to the successor of 
> the
>       successor.
Nice. But forces to use iterators everywhere.



More information about the Digitalmars-d-learn mailing list