Doubly-linked list/Element insertion: Difference between revisions

Updated D entry
(Racket)
(Updated D entry)
Line 230:
struct Node(T) {
T data;
Nodetypeof(this)* prev, next;
 
this(T data_, Node* prev_=null, Node* next_=null) {
data = data_;
prev = prev_;
next = next_;
}
}
 
/// If prev is null, prev gets to point to a new node.
void show(T)(Node!(T)* list) {
void insertAfter(T)(ref Node!(T)* prev, T item) pure nothrow {
while (list) {
write(list.data, " ");
list = list.next;
}
writeln();
 
/// If prev is null, prev gets to point to a new node
void insertAfter(T)(ref Node!(T)* prev, T item) {
if (prev) {
auto newNode = new Node!T(item, prev, prev.next);
Line 256 ⟶ 242:
} else
prev = new Node!T(item);
 
void show(T)(Node!(T)* list) {
while (list) {
write(list.data, " ");
datalist = data_list.next;
}
writeln();
}
 
Line 261 ⟶ 255:
Node!(string)* list;
insertAfter(list, "A");
show(list).show;
insertAfter(list, "B");
show(list).show;
insertAfter(list, "C");
show(list).show;
}</lang>
{{out}}
Output:
<pre>A
A B