목록
리스트
선형 목록
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
}
환상 목록
양방향 목록
마음이 가면 추기
Reference
이 문제에 관하여(목록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/zak74702675/items/53fc20d9509db90575e0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)