Home  >  Article  >  Backend Development  >  Learn how to implement singly linked list in Go language from scratch

Learn how to implement singly linked list in Go language from scratch

PHPz
PHPzOriginal
2024-03-22 09:15:04866browse

Learn how to implement singly linked list in Go language from scratch

Learn the implementation method of singly linked list in Go language from scratch

When learning data structures and algorithms, singly linked list is one of the basic and important data structures. This article will introduce how to use Go language to implement a singly linked list, and help readers better understand this data structure through specific code examples.

What is a singly linked list

A singly linked list is a linear data structure consisting of a series of nodes. Each node contains data and a pointer to the next node. The pointer of the last node points to null.

Basic operations of singly linked lists

Singly linked lists usually support several basic operations, including insertion, deletion and search. Now we will implement these operations step by step.

Create node structure

First, we need to define the node structure of a singly linked list:

type Node struct {
    data interface{}
    next *Node
}

In the above structure, the data field is used to store the data of the node, and the next field is a pointer to the next node.

Initialize the linked list

Next, we need to define a LinkedList structure to represent a singly linked list and provide some basic operation methods:

type LinkedList struct {
    head *Node
}

func NewLinkedList() *LinkedList {
    return &LinkedList{}
}

Insert node

Method to implement inserting a node at the head of a singly linked list:

func (list *LinkedList) Insert(data interface{}) {
    newNode := &Node{data: data}
    if list.head == nil {
        list.head = newNode
    } else {
        newNode.next = list.head
        list.head = newNode
    }
}

Delete node

Method to implement deletion of node with specified data:

func (list *LinkedList) Delete(data interface{}) {
    if list.head == nil {
        return
    }

    if list.head.data == data {
        list.head = list.head.next
        return
    }

    prev := list.head
    current := list.head.next

    for current != nil {
        if current.data == data {
            prev.next = current.next
            return
        }

        prev = current
        current = current.next
    }
}

Find nodes

Method to implement finding nodes with specified data:

func (list *LinkedList) Search(data interface{}) bool {
    current := list.head
    for current != nil {
        if current.data == data {
            return true
        }
        current = current.next
    }
    return false
}

Complete example

The following is a complete example code that demonstrates how to create a singly linked list, insert nodes, delete nodes and find nodes:

package main

import "fmt"

type Node struct {
    data interface{}
    next *Node
}

type LinkedList struct {
    head *Node
}

func NewLinkedList() *LinkedList {
    return &LinkedList{}
}

func (list *LinkedList) Insert(data interface{}) {
    newNode := &Node{data: data}
    if list.head == nil {
        list.head = newNode
    } else {
        newNode.next = list.head
        list.head = newNode
    }
}

func (list *LinkedList) Delete(data interface{}) {
    if list.head == nil {
        return
    }

    if list.head.data == data {
        list.head = list.head.next
        return
    }

    prev := list.head
    current := list.head.next

    for current != nil {
        if current.data == data {
            prev.next = current.next
            return
        }

        prev = current
        current = current.next
    }
}

func (list *LinkedList) Search(data interface{}) bool {
    current := list.head
    for current != nil {
        if current.data == data {
            return true
        }
        current = current.next
    }
    return false
}

func main() {
    list := NewLinkedList()
    
    list.Insert(1)
    list.Insert(2)
    list.Insert(3)
    
    fmt.Println(list.Search(2)) // Output: true
    
    list.Delete(2)
    
    fmt.Println(list.Search(2)) // Output: false
}

总结

通过上面的代码示例,我们了解了如何使用Go语言实现单链表的基本操作。掌握了单链表的实现方法之后,读者可以进一步学习更复杂的数据结构以及相关算法,加深对计算机科学的理解和应用。希朐本文对读者有所帮助,谢谢阅读!

The above is the detailed content of Learn how to implement singly linked list in Go language from scratch. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn