mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-06 23:28:29 +08:00
设计链表 没有Go单链表的实现只有循环双链表 添加单链表实现便于理解
This commit is contained in:
@ -652,6 +652,106 @@ class MyLinkedList:
|
||||
|
||||
Go:
|
||||
|
||||
```go
|
||||
//单链表实现
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
var list = new(SingleLinkedList)
|
||||
list.Init()
|
||||
list.addAtHead(100)
|
||||
list.addAtTail(242)
|
||||
list.addAtTail(777)
|
||||
list.addAtIndex(1, 99999)
|
||||
list.printLinkedList()
|
||||
}
|
||||
|
||||
// 单链表写法 //
|
||||
|
||||
type SingleNode struct {
|
||||
Val int
|
||||
Next *SingleNode
|
||||
}
|
||||
|
||||
type SingleLinkedList struct {
|
||||
dummyHead *SingleNode
|
||||
Size int
|
||||
}
|
||||
|
||||
// 初始化链表
|
||||
func (list *SingleLinkedList) Init() *SingleLinkedList {
|
||||
list.Size = 0
|
||||
list.dummyHead = new(SingleNode)
|
||||
return list
|
||||
}
|
||||
|
||||
// 获取第index个节点数值
|
||||
func (list *SingleLinkedList) get(index int) int {
|
||||
if list != nil || index < 0 || index > list.Size {
|
||||
return -1
|
||||
}
|
||||
// 让cur等于真正头节点
|
||||
cur := list.dummyHead.Next
|
||||
for i := 0; i < index; i++ {
|
||||
cur = cur.Next
|
||||
}
|
||||
return cur.Val
|
||||
}
|
||||
|
||||
// 在链表最前面插入一个节点
|
||||
func (list *SingleLinkedList) addAtHead(val int) {
|
||||
// 以下两行代码可用一行代替
|
||||
// newNode := new(SingleNode)
|
||||
// newNode.Val = val
|
||||
newNode := &SingleNode{Val: val}
|
||||
|
||||
newNode.Next = list.dummyHead.Next
|
||||
list.dummyHead.Next = newNode
|
||||
list.Size++
|
||||
}
|
||||
|
||||
// 在链表最后面插入一个节点
|
||||
func (list *SingleLinkedList) addAtTail(val int) {
|
||||
newNode := &SingleNode{Val: val}
|
||||
cur := list.dummyHead
|
||||
for cur.Next != nil {
|
||||
cur = cur.Next
|
||||
}
|
||||
cur.Next = newNode
|
||||
list.Size++
|
||||
}
|
||||
|
||||
// 打印链表
|
||||
func (list *SingleLinkedList) printLinkedList() {
|
||||
cur := list.dummyHead
|
||||
for cur.Next != nil {
|
||||
fmt.Println(cur.Next.Val)
|
||||
cur = cur.Next
|
||||
}
|
||||
}
|
||||
|
||||
// 在第index个节点之前插入新节点
|
||||
func (list *SingleLinkedList) addAtIndex(index int, val int) {
|
||||
if index < 0 {
|
||||
index = 0
|
||||
} else if index > list.Size {
|
||||
return
|
||||
}
|
||||
|
||||
newNode := &SingleNode{Val: val}
|
||||
cur := list.dummyHead //用虚拟头节点不用考虑在头部插入的情况
|
||||
for i := 0; i < index; i++ {
|
||||
cur = cur.Next
|
||||
}
|
||||
newNode.Next = cur.Next
|
||||
cur.Next = newNode
|
||||
list.Size++
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
```go
|
||||
//循环双链表
|
||||
type MyLinkedList struct {
|
||||
|
Reference in New Issue
Block a user