1. 定义节点
type Node struct {
Data any
Next * Node
}
type LinkedList struct {
headNode * Node
}
2. IsEmpty():
func ( l * LinkedList) IsEmpty ( ) bool {
if l. headNode == nil {
return true
}
return false
}
3. Length():
func ( l * LinkedList) Length ( ) int {
currentNode := l. headNode
if currentNode == nil {
return 0
}
length := 0
for currentNode != nil {
length++
currentNode = currentNode. Next
}
return length
}
4. AddFromHead():
func ( l * LinkedList) AddFromHead ( data any) {
node := & Node{ data, nil }
if l. IsEmpty ( ) {
l. headNode = node
return
}
node. Next = l. headNode
l. headNode = node
}
5. AddFromTail():
func ( l * LinkedList) AddFromTail ( data any) {
node := & Node{ data, nil }
if l. IsEmpty ( ) == true {
l. headNode = node
return
}
currentNode := l. headNode
for currentNode. Next != nil {
currentNode = currentNode. Next
}
currentNode. Next = node
}
6. Insert()
func ( l * LinkedList) Insert ( position int , data any) {
if position <= 0 {
l. AddFromHead ( data)
} else if position >= l. Length ( ) {
l. AddFromTail ( data)
} else {
node := & Node{ data, nil }
preNode := l. headNode
count := 0
for count != position- 1 {
preNode = preNode. Next
count++
}
node. Next = preNode. Next
preNode. Next = node
}
}
7. DeleteHead()
func ( l * LinkedList) DeleteHead ( ) any {
if l. IsEmpty ( ) {
fmt. Println ( "LinkedList is empty" )
return nil
}
head := l. headNode
l. headNode = l. headNode. Next
return head
}
8. DeleteTail()
func ( l * LinkedList) DeleteTail ( ) any {
if l. IsEmpty ( ) {
fmt. Println ( "LinkedList is empty" )
return nil
}
currentNode := l. headNode
for currentNode. Next. Next != nil {
currentNode = currentNode. Next
}
data := currentNode. Next. Data
currentNode. Next = nil
return data
}
9. Remove()
func ( l * LinkedList) Remove ( data any) {
if l. IsEmpty ( ) {
return
}
currentNode := l. headNode
if currentNode. Data == data {
l. headNode = currentNode. Next
} else {
for currentNode. Next != nil {
if currentNode. Next. Data == data {
currentNode. Next = currentNode. Next. Next
} else {
currentNode = currentNode. Next
}
}
}
}
10. Contain()
func ( l * LinkedList) Contain ( data any) bool {
if l. IsEmpty ( ) {
return false
}
currentNode := l. headNode
if currentNode. Data == data {
return true
}
for currentNode != nil {
if currentNode. Data == data {
return true
}
currentNode = currentNode. Next
}
return false
}
11. Traverse()
func ( l * LinkedList) Traverse ( ) {
if l. IsEmpty ( ) {
fmt. Println ( "LinkedList is empty" )
return
}
currentNode := l. headNode
for currentNode != nil {
fmt. Printf ( "%v -> " , currentNode. Data)
currentNode = currentNode. Next
}
}