golang解力扣203. 移除链表元素并举例验证解法

golang解力扣203. 移除链表元素并举例验证解法

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

解法:

package main

import "fmt"

type ListNode struct {
Val  int
Next *ListNode
}

//203. 移除链表元素。思路:添加一个虚拟的首节点
func removeElements(head *ListNode, val int) *ListNode {
dummyHead := &ListNode{}
dummyHead.Next = head
cur := dummyHead

for cur != nil && cur.Next != nil {
if cur.Next.Val == val {
cur.Next = cur.Next.Next
} else {
cur = cur.Next
}
}

return dummyHead.Next
}

//构造链表
func linkList(datas []int) *ListNode {
var head = ListNode{Val: datas[0]}
var tail *ListNode
tail = &head
for i := 1; i < len(datas); i++ {
node := ListNode{Val: datas[i]}
tail.Next = &node
tail = &node
}
return &head
}

//遍历链表值
func ShowNode(p *ListNode) {
for p != nil {
fmt.Println(*p)
p = p.Next
}
fmt.Println()
}

func main() {
var datas = [...]int{1, 2, 6, 3, 4, 5, 6}

//构造链表并返回第一个节点的地址
head := linkList(datas[:])

//遍历初始链表
ShowNode(head)

//移除指定链表元素并返回第一个节点的地址
newHead := removeElements(head, 3)

//遍历最后的链表
ShowNode(newHead)

}

疑点

目前仍然存在困惑的地方是【构造链表】的代码中,以下两行代码的用法还没有想明白。

        tail.Next = &node
tail = &node
 
posted @ 2022-09-17 15:19  no-i-can  阅读(97)  评论(0编辑  收藏  举报