106 lines
1.4 KiB
Go
106 lines
1.4 KiB
Go
|
package main
|
||
|
|
||
|
import "fmt"
|
||
|
|
||
|
type linkNode struct {
|
||
|
value int
|
||
|
next *linkNode
|
||
|
}
|
||
|
|
||
|
type linkList struct {
|
||
|
head *linkNode
|
||
|
}
|
||
|
|
||
|
func newLinkList() *linkList {
|
||
|
return &linkList{
|
||
|
head: nil,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (l *linkList) Print() {
|
||
|
for node := l.head; node != nil; node = node.next {
|
||
|
fmt.Printf("%d ", node.value)
|
||
|
}
|
||
|
fmt.Println()
|
||
|
}
|
||
|
|
||
|
func (l *linkList) Add(value int) {
|
||
|
node := &linkNode{
|
||
|
value: value,
|
||
|
next: nil,
|
||
|
}
|
||
|
|
||
|
if l.head == nil {
|
||
|
l.head = node
|
||
|
return
|
||
|
}
|
||
|
|
||
|
for n := l.head; n != nil; n = n.next {
|
||
|
if n.next == nil {
|
||
|
n.next = node
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (l *linkList) Adds(value ...int) {
|
||
|
for _, v := range value {
|
||
|
l.Add(v)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (l *linkList) LeftShift(n int) {
|
||
|
if n <= 0 {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
var prev *linkNode
|
||
|
for i, node := 0, l.head; node != nil; i, node = i+1, node.next {
|
||
|
if i == n {
|
||
|
l.head = node
|
||
|
prev.next = nil
|
||
|
break
|
||
|
}
|
||
|
prev = node
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (l *linkList) LeftShiftCycle(n int) {
|
||
|
if n <= 0 {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
var prev *linkNode
|
||
|
for i, node := 0, l.head; node != nil; i, node = i+1, node.next {
|
||
|
if i == n {
|
||
|
l.head = node
|
||
|
prev.next = nil
|
||
|
break
|
||
|
}
|
||
|
prev = node
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (l *linkList) Inverse() {
|
||
|
var prev *linkNode
|
||
|
for node := l.head; node != nil; {
|
||
|
next := node.next
|
||
|
node.next = prev
|
||
|
prev = node
|
||
|
node = next
|
||
|
}
|
||
|
l.head = prev
|
||
|
}
|
||
|
|
||
|
func main() {
|
||
|
|
||
|
l := newLinkList()
|
||
|
l.Adds(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
|
||
|
|
||
|
l.Print()
|
||
|
//l.Inverse()
|
||
|
l.LeftShiftCycle(3)
|
||
|
l.Print()
|
||
|
|
||
|
}
|