题目:
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点
算法:
方法一:贪心
func removeElements(head *ListNode, val int) *ListNode {
dummy := &ListNode{Next: head}
node := dummy.Next
pre := dummy
for node != nil {
if node.Val == val {
pre.Next = node.Next
} else {
pre = node
}
node = node.Next
}
return dummy.Next
}
方法二:动态规划
func wiggleMaxLength(nums []int) int {
// 最后一次摆动是up,down的序列坡数,坡数+1=节点数
up, down := 0, 0
for i := 1; i < len(nums); i ++ {
if nums[i - 1] < nums[i] {
up = down + 1
}
if nums[i - 1] > nums[i] {
down = up + 1
}
}
if up > down {
return up + 1
}
return down + 1
}