Singly-linked list/Element removal: Difference between revisions

Content added Content deleted
(Added Go)
Line 309: Line 309:
</lang>
</lang>
No label, no nasty literal GO TO - even though an "END DO" hides one.
No label, no nasty literal GO TO - even though an "END DO" hides one.

=={{header|Go}}==
This reuses code from other singly-linked list tasks.
<lang go>package main

import "fmt"

type Ele struct {
Data interface{}
Next *Ele
}

var head *Ele

func (e *Ele) Append(data interface{}) *Ele {
if e == nil {
return e
}
if e.Next == nil {
e.Next = &Ele{data, nil}
} else {
e.Next = &Ele{data, e.Next}
}
return e.Next
}

// Removes first element with given data value from the list.
// If this is 'head' element, resets 'head' to next element.
// Does nothing if data value is not present.
func (e *Ele) Remove(data interface{}) {
if e == nil {
return
}
if e.Data == data {
if e == head {
head = e.Next
}
e.Next = nil
return
}
prev := e
for iter := e.Next; iter != nil; iter = iter.Next {
if iter.Data == data {
prev.Next = iter.Next
iter.Next = nil
return
}
prev = iter
}
}

func (e *Ele) String() string {
return fmt.Sprintf("%v", e.Data)
}

func (e *Ele) Traverse() {
if e == nil {
fmt.Println(e)
return
}
for iter := e; iter != nil; iter = iter.Next {
fmt.Println(iter)
}
}

func main() {
head = &Ele{"tacos", nil}
next := head.Append("burritos")
next = next.Append("fajitas")
next = next.Append("enchilatas")

fmt.Println("Before any removals:")
head.Traverse()

head.Remove("fajitas")
fmt.Println("\nAfter removing fajitas:")
head.Traverse()

head.Remove("tacos")
fmt.Println("\nAfter removing tacos:")
head.Traverse()

head.Remove("enchilatas")
fmt.Println("\nAfter removing enchilatas:")
head.Traverse()

head.Remove("burritos")
fmt.Println("\nAfter removing burritos:")
head.Traverse()
}</lang>

{{out}}
<pre>
Before any removals:
tacos
burritos
fajitas
enchilatas

After removing fajitas:
tacos
burritos
enchilatas

After removing tacos:
burritos
enchilatas

After removing enchilatas:
burritos

After removing burritos:
<nil>
</pre>


=={{header|Julia}}==
=={{header|Julia}}==