hello-algo/codes/go/pkg/list_node.go
2022-11-26 01:17:48 +08:00

60 lines
1.1 KiB
Go

// File: list_node.go
// Created Time: 2022-11-25
// Author: Reanon (793584285@qq.com)
package pkg
import (
"fmt"
"strconv"
"strings"
)
// ListNode Definition for a singly-linked list node
type ListNode struct {
Next *ListNode
Val int
}
// NewListNode Generate a list node with an val
func NewListNode(v int) *ListNode {
return &ListNode{
Next: nil,
Val: v,
}
}
// ArrayToLinkedList Generate a linked list with an array
func ArrayToLinkedList(arr []int) *ListNode {
// dummy header of linked list
dummy := NewListNode(0)
node := dummy
for _, val := range arr {
node.Next = NewListNode(val)
node = node.Next
}
return dummy.Next
}
// GetListNode Get a list node with specific value from a linked list
func GetListNode(node *ListNode, val int) *ListNode {
for node != nil && node.Val != val {
node = node.Next
}
return node
}
// PrintLinkedList Print a linked list
func PrintLinkedList(node *ListNode) {
if node == nil {
return
}
var builder strings.Builder
for node.Next != nil {
builder.WriteString(strconv.Itoa(node.Val) + " -> ")
node = node.Next
}
builder.WriteString(strconv.Itoa(node.Val))
fmt.Println(builder.String())
}