Jump to content

Doubly-linked list/Definition: Difference between revisions

Rename Perl 6 -> Raku, alphabetize, minor clean-up
(Rename Perl 6 -> Raku, alphabetize, minor clean-up)
Line 132:
Empty from tail: saw I cat a it Was
</pre>
 
=={{header|ARM Assembly}}==
{{works with|as|Raspberry Pi}}
Line 374 ⟶ 375:
 
</lang>
 
=={{header|AutoHotkey}}==
see [[Doubly-linked list/AutoHotkey]]
Line 574 ⟶ 576:
}
}</lang>
 
=={{header|C++}}==
{{works with|C++11}}
<lang cpp>#include <iostream>
#include <list>
 
int main ()
{
std::list<int> numbers {1, 5, 7, 0, 3, 2};
numbers.insert(numbers.begin(), 9); //Insert at the beginning
numbers.insert(numbers.end(), 4); //Insert at the end
auto it = std::next(numbers.begin(), numbers.size() / 2); //Iterator to the middle of the list
numbers.insert(it, 6); //Insert in the middle
for(const auto& i: numbers)
std::cout << i << ' ';
std::cout << '\n';
}</lang>
{{out}}
<pre>
9 1 5 7 6 0 3 2 4
</pre>
 
=={{header|C sharp}}==
Line 643 ⟶ 624:
.AddAfter() adds after a specified node.
.AddFirst() adds at the head.</pre>
 
=={{header|C++}}==
{{works with|C++11}}
<lang cpp>#include <iostream>
#include <list>
 
int main ()
{
std::list<int> numbers {1, 5, 7, 0, 3, 2};
numbers.insert(numbers.begin(), 9); //Insert at the beginning
numbers.insert(numbers.end(), 4); //Insert at the end
auto it = std::next(numbers.begin(), numbers.size() / 2); //Iterator to the middle of the list
numbers.insert(it, 6); //Insert in the middle
for(const auto& i: numbers)
std::cout << i << ' ';
std::cout << '\n';
}</lang>
{{out}}
<pre>
9 1 5 7 6 0 3 2 4
</pre>
 
=={{header|Clojure}}==
Line 1,200 ⟶ 1,202:
let e = Some {prev=Some link; data=elt; next=link.next}
link.next <- e</lang>
 
 
=={{header|Fortran}}==
Line 1,709 ⟶ 1,710:
=={{header|JavaScript}}==
See [[Doubly-Linked List (element)#JavaScript]], [[Doubly-Linked List (element insertion)#JavaScript]] and [[Doubly-Linked List (traversal)#JavaScript]]
 
 
=={{header|Julia}}==
Line 2,122:
<pre>15 -> 14 -> 12
hello -> world</pre>
 
=={{header|Oberon-2}}==
<lang oberon2>
Line 2,216 ⟶ 2,217:
[1] (DList) [A, C, B]
</pre>
 
=={{header|Perl 6}}==
This shows a complete example. (Other entries in the section focus on aspects of this solution.)
<lang perl6>role DLElem[::T] {
has DLElem[T] $.prev is rw;
has DLElem[T] $.next is rw;
has T $.payload = T;
 
method pre-insert(T $payload) {
die "Can't insert before beginning" unless $!prev;
my $elem = ::?CLASS.new(:$payload);
$!prev.next = $elem;
$elem.prev = $!prev;
$elem.next = self;
$!prev = $elem;
$elem;
}
 
method post-insert(T $payload) {
die "Can't insert after end" unless $!next;
my $elem = ::?CLASS.new(:$payload);
$!next.prev = $elem;
$elem.next = $!next;
$elem.prev = self;
$!next = $elem;
$elem;
}
 
method delete {
die "Can't delete a sentinel" unless $!prev and $!next;
$!next.prev = $!prev;
$!prev.next = $!next; # conveniently returns next element
}
}
 
role DLList[::DLE] {
has DLE $.first;
has DLE $.last;
 
submethod BUILD {
$!first = DLE.new;
$!last = DLE.new;
$!first.next = $!last;
$!last.prev = $!first;
}
 
method list { ($!first.next, *.next ...^ !*.next).map: *.payload }
method reverse { ($!last.prev, *.prev ...^ !*.prev).map: *.payload }
}
 
class DLElem_Int does DLElem[Int] {}
class DLList_Int does DLList[DLElem_Int] {}
 
my $dll = DLList_Int.new;
 
$dll.first.post-insert(1).post-insert(2).post-insert(3);
$dll.first.post-insert(0);
 
$dll.last.pre-insert(41).pre-insert(40).prev.delete; # (deletes 3)
$dll.last.pre-insert(42);
 
say $dll.list; # 0 1 2 40 41 42
say $dll.reverse; # 42 41 40 2 1 0</lang>
{{out}}
<pre>0 1 2 40 41 42
42 41 40 2 1 0</pre>
 
=={{header|Phix}}==
Line 2,566 ⟶ 2,501:
</lang>
 
=={{header|Raku}}==
(formerly Perl 6)
This shows a complete example. (Other entries in the section focus on aspects of this solution.)
<lang perl6>role DLElem[::T] {
has DLElem[T] $.prev is rw;
has DLElem[T] $.next is rw;
has T $.payload = T;
 
method pre-insert(T $payload) {
die "Can't insert before beginning" unless $!prev;
my $elem = ::?CLASS.new(:$payload);
$!prev.next = $elem;
$elem.prev = $!prev;
$elem.next = self;
$!prev = $elem;
$elem;
}
 
method post-insert(T $payload) {
die "Can't insert after end" unless $!next;
my $elem = ::?CLASS.new(:$payload);
$!next.prev = $elem;
$elem.next = $!next;
$elem.prev = self;
$!next = $elem;
$elem;
}
 
method delete {
die "Can't delete a sentinel" unless $!prev and $!next;
$!next.prev = $!prev;
$!prev.next = $!next; # conveniently returns next element
}
}
 
role DLList[::DLE] {
has DLE $.first;
has DLE $.last;
 
submethod BUILD {
$!first = DLE.new;
$!last = DLE.new;
$!first.next = $!last;
$!last.prev = $!first;
}
 
method list { ($!first.next, *.next ...^ !*.next).map: *.payload }
method reverse { ($!last.prev, *.prev ...^ !*.prev).map: *.payload }
}
 
class DLElem_Int does DLElem[Int] {}
class DLList_Int does DLList[DLElem_Int] {}
 
my $dll = DLList_Int.new;
 
$dll.first.post-insert(1).post-insert(2).post-insert(3);
$dll.first.post-insert(0);
 
$dll.last.pre-insert(41).pre-insert(40).prev.delete; # (deletes 3)
$dll.last.pre-insert(42);
 
say $dll.list; # 0 1 2 40 41 42
say $dll.reverse; # 42 41 40 2 1 0</lang>
{{out}}
<pre>0 1 2 40 41 42
42 41 40 2 1 0</pre>
 
=={{header|REXX}}==
10,333

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.