571
社区成员
发帖
与我相关
我的任务
分享首先创建基础结构体:
type LinkTableNode struct {
pNext *LinkTableNode
v interface{}
}
type LinkTable struct {
pHead *LinkTableNode
pTail *LinkTableNode
size int
}
然后我们创建相应的方法,分别是:
创建新链表
func CreateLinkTable() *LinkTable {
var head = new(LinkTableNode)
head.pNext = nil
return &LinkTable{head, nil, 0}
}
获得和设置链表的基础属性
func (lt *LinkTable) getHead() *LinkTableNode {
return lt.pHead
}
func (lt *LinkTable) getTail() *LinkTableNode {
return lt.pTail
}
func (lt *LinkTable) setTail(n *LinkTableNode) bool {
lt.pTail = n
return true
}
func (lt *LinkTable) addSize(num int) {
lt.size += num
}
func (lt *LinkTable) subSize(num int) {
lt.size -= num
}
func (lt *LinkTable) GetSize() int {
return lt.size
}
3.头插法和尾插法插入节点
func (lt *LinkTable) InsertFromHead(v interface{}) bool {
var node = new(LinkTableNode)
node.v = v
var head = lt.getHead()
if head == nil {
return false
}
var t = head.pNext
head.pNext = node
node.pNext = t
var tail = lt.getTail()
if tail == nil {
lt.setTail(node)
}
lt.addSize(1)
return true
}
func (lt *LinkTable) InsertFromTail(v interface{}) bool {
var tail = lt.getTail()
if tail == nil {
return lt.InsertFromHead(v)
}
var node = new(LinkTableNode)
node.v = v
node.pNext = nil
tail.pNext = node
tail = tail.pNext
lt.setTail(tail)
lt.addSize(1)
return true
}
4.查找节点
func (lt *LinkTable) FindNode(v interface{}) (*LinkTableNode, int) {
p := lt.getHead()
var index = 1
for p.pNext != nil {
if p.pNext.v == v {
return p.pNext, index
}
index++
p = p.pNext
}
return nil, -1
}
func (lt *LinkTable) FindKthNode(k int) *LinkTableNode {
if k > lt.GetSize() || k < 0 {
return nil
}
if k == 0 {
return lt.getHead()
}
p := lt.getHead()
i := 1
for i != k {
i++
p = p.pNext
}
return p.pNext
}
5.删除指定节点
func (lt *LinkTable) DeleteKthNode(k int) bool {
if k <= 0 || k > lt.GetSize() {
return false
}
var node = lt.FindKthNode(k)
var parent = lt.FindKthNode(k - 1)
parent.pNext = node.pNext
lt.subSize(1)
return true
}
至此一个链表的基础算法设计完成
然后使用以下命令将代码推送到gitee上

学号:346