|
| 1 | +package main |
| 2 | + |
| 3 | +import "fmt" |
| 4 | + |
| 5 | +/** |
| 6 | + * LC#203 移除链表元素 Remove Linked List Elements |
| 7 | + * Link:https://leetcode-cn.com/problems/remove-linked-list-elements/ |
| 8 | + * 思路1(optimum solution 最优解):初始化一个 sentinel 遍历检查链表 head 链表,判断 tmp.val == val 就放弃当前引用,指向下一个引用 简单粗暴。从官方答案来看这应该也是最优解了 |
| 9 | + */ |
| 10 | +type ListNode struct { |
| 11 | + Val int |
| 12 | + Next *ListNode |
| 13 | +} |
| 14 | + |
| 15 | +func removeElements(head *ListNode, val int) *ListNode { |
| 16 | + sentinel := &ListNode{0, head} |
| 17 | + for tmp := sentinel; tmp.Next != nil; { |
| 18 | + if tmp.Next.Val == val { |
| 19 | + tmp.Next = tmp.Next.Next |
| 20 | + } else { |
| 21 | + tmp = tmp.Next |
| 22 | + } |
| 23 | + } |
| 24 | + return sentinel.Next |
| 25 | +} |
| 26 | + |
| 27 | +func main() { |
| 28 | + |
| 29 | + // build a simple linked |
| 30 | + n7 := ListNode{6, nil} |
| 31 | + n6 := ListNode{5, &n7} |
| 32 | + n5 := ListNode{4, &n6} |
| 33 | + n4 := ListNode{3, &n5} |
| 34 | + n3 := ListNode{6, &n4} |
| 35 | + n2 := ListNode{2, &n3} |
| 36 | + n1 := ListNode{1, &n2} |
| 37 | + cur := removeElements(&n1, 6) |
| 38 | + |
| 39 | + // Output Linked ... |
| 40 | + for cur != nil { |
| 41 | + fmt.Printf("cur %v , val %d \n", cur, cur.Val) |
| 42 | + cur = cur.Next |
| 43 | + } |
| 44 | +} |
0 commit comments