Golang每日一练(leetDay0070) 移除链表元素、计数质数

简介: Golang每日一练(leetDay0070) 移除链表元素、计数质数

203. 移除链表元素  Remove Linked-list Elements


给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点


示例 1:

d25595fdbfc9fca0f45590162d1b3c27.jpeg


输入:head = [1,2,6,3,4,5,6], val = 6

输出:[1,2,3,4,5]


示例 2:

输入:head = [], val = 1

输出:[]


示例 3:

输入:head = [7,7,7,7], val = 7

输出:[]

 

提示:

   列表中的节点数目在范围 [0, 104] 内

   1 <= Node.val <= 50

   0 <= val <= 50

代码:

package main
import "fmt"
type ListNode struct {
  Val  int
  Next *ListNode
}
func removeElements(head *ListNode, val int) *ListNode {
  top := &ListNode{Val: 0}
  top.Next = head
  pre := top
  temp := head
  for temp != nil {
    if temp.Val == val {
      pre.Next = temp.Next
    } else {
      pre = temp
    }
    temp = temp.Next
  }
  return top.Next
}
func createLinkedList(nums []int) *ListNode {
  if len(nums) == 0 {
    return nil
  }
  head := &ListNode{Val: nums[0]}
  cur := head
  for i := 1; i < len(nums); i++ {
    cur.Next = &ListNode{Val: nums[i]}
    cur = cur.Next
  }
  return head
}
func printLinkedList(head *ListNode) {
  cur := head
  for cur != nil {
    fmt.Print(cur.Val, "->")
    cur = cur.Next
  }
  fmt.Println("nil")
}
func main() {
  nums := []int{1, 2, 6, 3, 4, 5, 6}
  head := createLinkedList(nums)
  printLinkedList(head)
  head = removeElements(head, 6)
  printLinkedList(head)
  nums2 := []int{}
  head = createLinkedList(nums2)
  printLinkedList(head)
  head = removeElements(head, 1)
  printLinkedList(head)
  nums3 := []int{7, 7, 7, 7}
  head = createLinkedList(nums3)
  printLinkedList(head)
  head = removeElements(head, 7)
  printLinkedList(head)
}

输出:

1->2->6->3->4->5->6->nil

1->2->3->4->5->nil

nil

nil

7->7->7->7->nil

nil

递归法:

package main
import "fmt"
type ListNode struct {
  Val  int
  Next *ListNode
}
func removeElements(head *ListNode, val int) *ListNode {
  if head == nil {
    return nil
  }
  head.Next = removeElements(head.Next, val)
  if head.Val == val {
    return head.Next
  }
  return head
}
func createLinkedList(nums []int) *ListNode {
  if len(nums) == 0 {
    return nil
  }
  head := &ListNode{Val: nums[0]}
  cur := head
  for i := 1; i < len(nums); i++ {
    cur.Next = &ListNode{Val: nums[i]}
    cur = cur.Next
  }
  return head
}
func printLinkedList(head *ListNode) {
  cur := head
  for cur != nil {
    fmt.Print(cur.Val, "->")
    cur = cur.Next
  }
  fmt.Println("nil")
}
func main() {
  nums := []int{1, 2, 6, 3, 4, 5, 6}
  head := createLinkedList(nums)
  printLinkedList(head)
  head = removeElements(head, 6)
  printLinkedList(head)
}



204. 计数质数 Count Primes


给定整数 n ,返回 所有小于非负整数 n 的质数的数量


示例 1:

输入:n = 10

输出:4

解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。


示例 2:

输入:n = 0

输出:0


示例 3:

输入:n = 1

输出:0


提示:

  • 0 <= n <= 5 * 10^6

代码:

package main
import (
  "fmt"
  "math"
)
func countPrimes(n int) int {
  if n <= 2 {
    return 0
  }
  isPrime := make([]bool, n)
  for i := 0; i < n; i++ {
    isPrime[i] = true
  }
  isPrime[0] = false
  isPrime[1] = false
  for i := 2; i <= int(math.Sqrt(float64(n))); i++ {
    if isPrime[i] {
      for j := i * i; j < n; j += i {
        isPrime[j] = false
      }
    }
  }
  count := 0
  for i := 0; i < n; i++ {
    if isPrime[i] {
      count++
    }
  }
  return count
}
func main() {
  fmt.Println(countPrimes(10))
  fmt.Println(countPrimes(0))
  fmt.Println(countPrimes(1))
}


输出:

4

0

0

目录
相关文章
|
2月前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
38 1
|
4月前
|
程序员
【刷题记录】移除链表元素
【刷题记录】移除链表元素
01_移除链表元素
01_移除链表元素
|
2月前
【LeetCode 06】203.移除链表元素
【LeetCode 06】203.移除链表元素
33 0
|
4月前
|
存储 算法
LeetCode第83题删除排序链表中的重复元素
文章介绍了LeetCode第83题"删除排序链表中的重复元素"的解法,使用双指针技术在原链表上原地删除重复元素,提供了一种时间和空间效率都较高的解决方案。
LeetCode第83题删除排序链表中的重复元素
|
4月前
|
存储 C语言
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
|
4月前
|
Python
【Leetcode刷题Python】203.移除链表元素
文章提供了三种删除链表中特定值节点的方法:迭代法、虚拟节点迭代删除法和递归法,并给出了相应的Python实现代码。
28 0
|
3月前
|
Go
Golang语言之管道channel快速入门篇
这篇文章是关于Go语言中管道(channel)的快速入门教程,涵盖了管道的基本使用、有缓冲和无缓冲管道的区别、管道的关闭、遍历、协程和管道的协同工作、单向通道的使用以及select多路复用的详细案例和解释。
144 4
Golang语言之管道channel快速入门篇
|
3月前
|
Go
Golang语言文件操作快速入门篇
这篇文章是关于Go语言文件操作快速入门的教程,涵盖了文件的读取、写入、复制操作以及使用标准库中的ioutil、bufio、os等包进行文件操作的详细案例。
72 4
Golang语言文件操作快速入门篇
|
3月前
|
Go
Golang语言之gRPC程序设计示例
这篇文章是关于Golang语言使用gRPC进行程序设计的详细教程,涵盖了RPC协议的介绍、gRPC环境的搭建、Protocol Buffers的使用、gRPC服务的编写和通信示例。
118 3
Golang语言之gRPC程序设计示例

热门文章

最新文章