用Go编写一个Linktable库

嘀嘀嘀 2022-07-10 17:59:50

链表结点定义

type ListNode struct {
	val  int
	next *ListNode
}

链表定义

type LinkList struct {
	head   *ListNode
	length int
}

创建链表

func CreateLinkList() LinkList {
	return LinkList{&ListNode{}, 0}
}

在指定位置添加元素

func (this *LinkList) AddAtIndex(index int, val int) {
	if index <= 0 {
		this.head.next = &ListNode{val, this.head.next}
		this.length++
		return
	} else if index == this.length {
		p := this.head
		for p.next != nil {
			p = p.next
		}
		p.next = &ListNode{val, nil}
		this.length++
		return
	} else if index > this.length {
		return
	}
 
	p := this.head
	for i := 0; i < index; i++ {
		p = p.next
	}
	q := &ListNode{val, nil}
	q.next = p.next
	p.next = q
	this.length++
}

删除指定位置元素

func (this *LinkList) DeleteAtIndex(index int) {
	if index < 0 || index >= this.length {
		return
	}
	p := this.head
	for i := 0; i < index; i++ {
		p = p.next
	}
	q := p.next
	p.next = q.next
	q.next = nil
	this.length--
}

遍历链表

func (this *LinkList) PrintList() {
	p := this.head.next
	for p != nil {
		fmt.Print(p.val)
		fmt.Print(" ")
		p = p.next
	}
	fmt.Println()
}

test

func main() {
	linklist := CreateLinkList()
	linklist.AddAtIndex(0, 1)
	linklist.AddAtIndex(0, 3)
	linklist.AddAtIndex(1, 4)
	linklist.AddAtIndex(1, 2)
	linklist.PrintList()
	linklist.DeleteAtIndex(1)
	linklist.PrintList()
}

运行结果

 上传到远程仓库

 连接:https://github.com/Jzxing/Linktable.git

作者:231

...全文
46 回复 打赏 收藏 举报
写回复
回复
切换为时间正序
请发表友善的回复…
发表回复
发帖
代码中的软件工程

395

社区成员

软件工程教学新范式,强化专项技能训练+基于项目的学习PBL。Git仓库:https://gitee.com/mengning997/se
软件工程 高校
社区管理员
  • 码农孟宁
加入社区
帖子事件
编辑了帖子 (查看)
2022-07-10 18:01
创建了帖子
2022-07-10 17:59