
数据结构与算法
数据结构与算法
北方的lang
学习
展开
-
9.waitGroup的使用
写代码实现两个 goroutine,其中一个产生随机数并写入到 go channel 中,另外一个从 channel 中读取数字并打印到标准输出。最终输出五个随机数。(商汤)package mainimport ( "fmt" "math/rand" "sync")func main() { out := make(chan int) wg := sync.WaitGroup{} wg.Add(2) go func() { defer wg.Done() for i :原创 2021-04-08 21:17:56 · 122 阅读 · 0 评论 -
8.从尾到头打印链表
/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */func reversePrint(head *ListNode) []int { cur := head var pre *ListNode = nil res :=make([]int,0) for cur != nil { pr.原创 2021-04-07 22:56:28 · 96 阅读 · 0 评论 -
7.移除链表元素节点
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } 初看这个题,我第一反应是要删除其中的节点,就一定要直到被删节点和它的前一个节点。 由此产生了继续用双指针解题的思想。 这种问题的第一反原创 2021-04-06 23:53:09 · 101 阅读 · 0 评论 -
6.树的前序、中序、后序遍历
type TreeNode struct { Value int Left *TreeNode Right *TreeNode}// 前序遍历func preorderTraversal(node *TreeNode) { if node == nil { return } fmt.Println(node.Value) preorderTraversal(node.Left) preorderTraversal(node.Right)}// 中序遍历func midO.原创 2021-04-06 20:49:41 · 77 阅读 · 0 评论 -
5.层序遍历
1.给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。package main import "fmt" type TreeNode struct { Val int Left *TreeNode Right *TreeNode} func levelOrder(root *TreeNode) [][]int { res := [][]int{} if root == nil{ return res }原创 2021-04-06 20:46:29 · 115 阅读 · 0 评论 -
4.求两个链表的交接点
1.解题思路此处撰写解题思路这应该是最简单的解法了,通过map特性对链表进行判断,先存入其中一个链表,然后再存入另一个的时候判断当前链表是否已经存在,如果存在则说明是交叉链表,且当前节点为交叉节点时间复杂度:O(n)空间复杂度:O(n)代码/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */func getInter原创 2021-04-05 23:23:05 · 213 阅读 · 0 评论 -
3.反转链表
1.迭代func reversrList(head *ListNode) *ListNode { cur := head var pre *ListNode = nil for cur != nil { pre, cur, cur.Next = cur, cur.Next, pre //这句话最重要 } return pre}2.迭代 不使用递归,使用三个指针来完成迭代 第一个curr代表当前节点 第二个prev代...原创 2021-04-05 23:03:41 · 75 阅读 · 0 评论 -
2.判断链表是否有环、环的长度、环的入口
package mainimport "fmt"type ListNode struct { Data interface{} Next *ListNode}func HasCycle(head *ListNode) bool { if head == nil { return false } fast, slow := head, head for fast !.原创 2021-04-01 22:36:17 · 185 阅读 · 0 评论 -
1.合并链表
/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode { if l1==nil{ return l2 } if l2==nil{ return l1 }.原创 2021-03-28 22:25:33 · 121 阅读 · 0 评论