


Go Language Programming Guide: Detailed Explanation of Single Linked List Implementation
Go Language Programming Guide: Detailed Explanation of Single Linked List Implementation
In Go language, singly linked list is a common data structure used to store a series of elements and Sequential access. This article will introduce the implementation principle of singly linked list in detail and give specific Go language code examples.
Definition of singly linked list
Singly linked list is a linear list data structure in which each element (node) contains two parts: the data field and the pointer field. The data field is used to store the value of the element, and the pointer field points to the next node. The pointer field of the last node is usually empty, indicating the end of the linked list.
Node definition of a singly linked list
First, we define a node type of a singly linked list:
type Node struct { data int next *Node }
Among them, the data
field stores the value of the node, next
The field stores the pointer to the next node.
Initialization of singly linked list
Next, we define the initialization function of singly linked list:
type LinkedList struct { head *Node } func NewLinkedList() *LinkedList { return &LinkedList{} }
In the initialization function, we create an empty linked list and set the head node The pointer is initialized to null.
Insertion operation of singly linked list
The insertion operation of singly linked list can be divided into two situations: inserting a node at the head of the linked list and inserting a node at the end of the linked list.
The first is the function to insert a node at the head of the linked list:
func (list *LinkedList) InsertAtBeginning(value int) { newNode := &Node{data: value} newNode.next = list.head list.head = newNode }
In this function, we first create a new node and initialize its value to the passed in value. Then point the pointer of the new node to the head of the linked list, and finally update the head node of the linked list to the new node.
Next is the function to insert a node at the end of the linked list:
func (list *LinkedList) InsertAtEnd(value int) { newNode := &Node{data: value} if list.head == nil { list.head = newNode return } current := list.head for current.next != nil { current = current.next } current.next = newNode }
This function first creates a new node and determines whether the linked list is empty. If it is empty, the new node is directly set as the head node; otherwise, the linked list is traversed until the last node is found, and then the new node is inserted after the last node.
Singly linked list deletion operation
Deletion operation is divided into two situations: deleting the head node and deleting the node with the specified value.
The first is the function to delete the head node:
func (list *LinkedList) DeleteAtBeginning() { if list.head == nil { return } list.head = list.head.next }
This function directly points the head node pointer to the next node, thereby deleting the head node.
Next is the function to delete the node with the specified value:
func (list *LinkedList) DeleteByValue(value int) { if list.head == nil { return } if list.head.data == value { list.head = list.head.next return } prev := list.head current := list.head.next for current != nil { if current.data == value { prev.next = current.next return } prev = current current = current.next } }
In this function, we need to first determine whether the linked list is empty. Then traverse the linked list starting from the head node, find the node where the target value is located and delete it.
Singly linked list traversal operation
The last is the singly linked list traversal operation:
func (list *LinkedList) Print() { current := list.head for current != nil { fmt.Print(current.data, " ") current = current.next } fmt.Println() }
This function prints the value of the node one by one starting from the head node until the end of the linked list.
Sample code
The following is a complete sample code that demonstrates how to use a singly linked list:
package main import "fmt" type Node struct { data int next *Node } type LinkedList struct { head *Node } func NewLinkedList() *LinkedList { return &LinkedList{} } func (list *LinkedList) InsertAtBeginning(value int) { newNode := &Node{data: value} newNode.next = list.head list.head = newNode } func (list *LinkedList) InsertAtEnd(value int) { newNode := &Node{data: value} if list.head == nil { list.head = newNode return } current := list.head for current.next != nil { current = current.next } current.next = newNode } func (list *LinkedList) DeleteAtBeginning() { if list.head == nil { return } list.head = list.head.next } func (list *LinkedList) DeleteByValue(value int) { if list.head == nil { return } if list.head.data == value { list.head = list.head.next return } prev := list.head current := list.head.next for current != nil { if current.data == value { prev.next = current.next return } prev = current current = current.next } } func (list *LinkedList) Print() { current := list.head for current != nil { fmt.Print(current.data, " ") current = current.next } fmt.Println() } func main() { list := NewLinkedList() list.InsertAtEnd(1) list.InsertAtEnd(2) list.InsertAtEnd(3) list.Print() list.DeleteByValue(2) list.Print() list.DeleteAtBeginning() list.Print() }
The above is a detailed guide to using the Go language to implement a singly linked list. I hope that through the introduction and sample code of this article, readers can have a deeper understanding of the principles and implementation of singly linked lists.
The above is the detailed content of Go Language Programming Guide: Detailed Explanation of Single Linked List Implementation. For more information, please follow other related articles on the PHP Chinese website!

Go's "strings" package provides rich features to make string operation efficient and simple. 1) Use strings.Contains() to check substrings. 2) strings.Split() can be used to parse data, but it should be used with caution to avoid performance problems. 3) strings.Join() is suitable for formatting strings, but for small datasets, looping = is more efficient. 4) For large strings, it is more efficient to build strings using strings.Builder.

Go uses the "strings" package for string operations. 1) Use strings.Join function to splice strings. 2) Use the strings.Contains function to find substrings. 3) Use the strings.Replace function to replace strings. These functions are efficient and easy to use and are suitable for various string processing tasks.

ThebytespackageinGoisessentialforefficientbyteslicemanipulation,offeringfunctionslikeContains,Index,andReplaceforsearchingandmodifyingbinarydata.Itenhancesperformanceandcodereadability,makingitavitaltoolforhandlingbinarydata,networkprotocols,andfileI

Go uses the "encoding/binary" package for binary encoding and decoding. 1) This package provides binary.Write and binary.Read functions for writing and reading data. 2) Pay attention to choosing the correct endian (such as BigEndian or LittleEndian). 3) Data alignment and error handling are also key to ensure the correctness and performance of the data.

The"bytes"packageinGooffersefficientfunctionsformanipulatingbyteslices.1)Usebytes.Joinforconcatenatingslices,2)bytes.Bufferforincrementalwriting,3)bytes.Indexorbytes.IndexByteforsearching,4)bytes.Readerforreadinginchunks,and5)bytes.SplitNor

Theencoding/binarypackageinGoiseffectiveforoptimizingbinaryoperationsduetoitssupportforendiannessandefficientdatahandling.Toenhanceperformance:1)Usebinary.NativeEndianfornativeendiannesstoavoidbyteswapping.2)BatchReadandWriteoperationstoreduceI/Oover

Go's bytes package is mainly used to efficiently process byte slices. 1) Using bytes.Buffer can efficiently perform string splicing to avoid unnecessary memory allocation. 2) The bytes.Equal function is used to quickly compare byte slices. 3) The bytes.Index, bytes.Split and bytes.ReplaceAll functions can be used to search and manipulate byte slices, but performance issues need to be paid attention to.

The byte package provides a variety of functions to efficiently process byte slices. 1) Use bytes.Contains to check the byte sequence. 2) Use bytes.Split to split byte slices. 3) Replace the byte sequence bytes.Replace. 4) Use bytes.Join to connect multiple byte slices. 5) Use bytes.Buffer to build data. 6) Combined bytes.Map for error processing and data verification.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

SublimeText3 Mac version
God-level code editing software (SublimeText3)

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

Notepad++7.3.1
Easy-to-use and free code editor

WebStorm Mac version
Useful JavaScript development tools
