Doubly-linked list/Definition: Difference between revisions
m
→{{header|Oforth}}
(Added C++ solution) |
|||
Line 1,489:
<lang oforth>Object Class new: DNode(value, mutable prev, mutable next)
DNode method: initialize
DNode method: value
DNode method: prev
DNode method: next
DNode method: setPrev
DNode method: setNext
DNode method: <<
DNode method: insertAfter(node)
node setPrev(self)
node setNext(@next)
@next ifNotNull: [ @next setPrev(node) ]
node := next ;
// Double linked list definition
Collection Class new: DList(mutable head, mutable tail)
DList method: head
DList method: tail
DList method: insertFront(v)
| p |
@head ->p
DNode new(v, null, p) := head
p ifNotNull: [ p setPrev(@head) ]
@tail ifNull: [ @head := tail ] ;
DList method: insertBack(v)
| n |
@tail ->n
DNode new(v, n, null) := tail
n ifNotNull: [ n setNext(@tail) ]
@head ifNull: [ @tail := head ] ;
DList method: forEachNext
dup ifNull: [ drop @head ifNull: [ false ] else: [ @head @head true] return ]
next dup ifNull: [ drop false ] else: [ dup true ] ;
DList method: forEachPrev
dup ifNull: [ drop @tail ifNull: [ false ] else: [ @tail @tail true] return ]
prev dup ifNull: [ drop false ] else: [ dup true ] ;
: test // ( -- aDList )
| dl dn |
DList new ->dl
Line 1,550 ⟶ 1,537:
dl insertBack("B")
dl head insertAfter(DNode new("C", null , null))
dl ;</lang>
{{out}}
|