リスト
リスト
- 参照は必ずしも高速ではないが,挿入・削除は高速
- v.s. 配列:参照が高速だが,挿入・削除は最悪の場合$O(n)$の計算量がかかる.
線形リスト
package main
import "fmt"
type Cell struct {
val int
next *Cell
}
type LinkedList struct {
head *Cell
}
func (l *LinkedList) Print() {
cell := l.head
for cell != nil {
fmt.Printf("val: %d\n", cell.val)
cell = cell.next
}
}
func (l *LinkedList) Insert(val int, previous *Cell) {
cell := NewCell(val)
if previous == nil {
fmt.Println("ERROR: Given previous cell does not exist yet.")
return
}
cell.next = previous.next
previous.next = cell
}
func (l *LinkedList) Prepend(val int) {
cell := NewCell(val)
cell.next = l.head
l.head = cell
}
func (l *LinkedList) Append(val int) {
cell := NewCell(val)
last := l.head
if last == nil {
l.head = cell
return
}
for last.next != nil {
last = last.next
}
last.next = cell
}
func (l *LinkedList) Delete(val int) {
if l.head == nil {
fmt.Println("ERROR: linked list does not exist yet.")
return
}
target := l.head
var prev *Cell
for target.next != nil {
if target.val == val {
break
}
prev = target
target = target.next
}
if target == l.head {
l.head = l.head.next
return
}
prev.next = target.next
target.next = nil
}
func NewCell(val int) *Cell {
return &Cell{val: val, next: nil}
}
func NewLinkedList() *LinkedList {
return &LinkedList{head: nil}
}
func main() {
l0 := NewLinkedList()
l0.head = NewCell(0)
c1 := NewCell(1)
c2 := NewCell(2)
l0.head.next = c1
c1.next = c2
l0.Print()
// val: 0
// val: 1
// val: 2
l0.Prepend(-1)
fmt.Println()
l0.Print()
// val: -1
// val: 0
// val: 1
// val: 2
l0.Append(99)
fmt.Println()
l0.Print()
// val: -1
// val: 0
// val: 1
// val: 2
// val: 99
l0.Insert(77, c2)
fmt.Println()
l0.Print()
// val: -1
// val: 0
// val: 1
// val: 2
// val: 77
// val: 99
l0.Delete(0)
fmt.Println()
l0.Print()
// val: -1
// val: 1
// val: 2
// val: 77
// val: 99
}
環状リスト
双方向リスト
気が向いたら追記
Author And Source
この問題について(リスト), 我々は、より多くの情報をここで見つけました https://qiita.com/zak74702675/items/53fc20d9509db90575e0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .