203.移除链表元素

51 阅读1分钟

题目:
给你一个链表的头节点 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
}