Doubly-linked list/Element removal: Difference between revisions

Line 190:
Then deleting node2 yields:
1 -> 4
</pre>
 
=={{header|Phix}}==
Extended copy of [[Doubly-linked_list/Traversal#Phix]]
<lang Phix>enum NEXT,PREV,DATA
constant empty_dll = {{1,1}}
sequence dll = empty_dll
procedure remove_item(integer pos)
if pos<=1 or pos>length(dll) then ?9/0 end if -- (sanity check)
integer {next,prev} = dll[pos]
dll[prev][NEXT] = next
dll[next][PREV] = prev
if pos<length(dll) then
dll[pos] = dll[$]
{next,prev} = dll[pos]
dll[prev][NEXT] = pos
dll[next][PREV] = pos
end if
dll = dll[1..-2]
end procedure
 
procedure insert_after(object data, integer pos=1)
integer prv = dll[pos][PREV]
dll = append(dll,{pos,prv,data})
if prv!=0 then
dll[prv][NEXT] = length(dll)
end if
dll[pos][PREV] = length(dll)
end procedure
insert_after("ONE")
insert_after("TWO")
insert_after("THREE")
?dll
procedure show(integer d)
integer idx = dll[1][d]
while idx!=1 do
?dll[idx][DATA]
idx = dll[idx][d]
end while
end procedure
show(NEXT)
?"=="
show(PREV)
while length(dll)>1 do
?"== removing one item =="
remove_item(rand(length(dll)-1)+1)
show(NEXT)
?"=="
show(PREV)
end while</lang>
{{out}}
<pre>
{{2,4},{3,1,"ONE"},{4,2,"TWO"},{1,3,"THREE"}}
"ONE"
"TWO"
"THREE"
"=="
"THREE"
"TWO"
"ONE"
"== removing one item =="
"ONE"
"THREE"
"=="
"THREE"
"ONE"
"== removing one item =="
"THREE"
"=="
"THREE"
"== removing one item =="
"=="
</pre>
7,806

edits