概述
给定一个链接列表和一个值,从链接列表中删除所有值等于给定值的节点。
例1
Input: [1, 2, 1, 3, 6], 1
Output: [2, 3, 6]
例2
Input: [2, 2, 3], 2
Output: [3]
程序
下面是同样的程序
package main
import "fmt"
type ListNode struct {
Val int
Next *ListNode
}
type SingleList struct {
Len int
Head *ListNode
}
func (s *SingleList) AddFront(num int) *ListNode {
ele := &ListNode{
Val: num,
}
if s.Head == nil {
s.Head = ele
} else {
ele.Next = s.Head
s.Head = ele
}
s.Len++
return ele
}
func removeElements(head *ListNode, val int) *ListNode {
var prev *ListNode
curr := head
for curr != nil {
if curr.Val == val {
if prev == nil {
head = curr.Next
} else {
prev.Next = curr.Next
}
} else {
prev = curr
}
curr = curr.Next
}
return head
}
func main() {
first := initList()
first.AddFront(6)
first.AddFront(3)
first.AddFront(1)
first.AddFront(2)
first.AddFront(1)
result := removeElements(first.Head, 1)
fmt.Println("Resultant First List")
result.Traverse()
first = initList()
first.AddFront(3)
first.AddFront(2)
first.AddFront(2)
fmt.Println("\nResultant Second List")
result = removeElements(first.Head, 2)
result.Traverse()
}
func initList() *SingleList {
return &SingleList{}
}
func (l *ListNode) Traverse() {
for l != nil {
fmt.Println(l.Val)
l = l.Next
}
}
输出
Resultant First List
2
3
6
Resultant Second List
3
注意 :请查看我们的Golang高级教程。这个系列的教程是精心设计的,我们试图用例子来涵盖所有的概念。本教程是为那些希望获得专业知识和扎实了解Golang的人准备的 -Golang高级教程