Go Language

Linked Lists in Go - Basic Implementation


Introduction

A linked list is a fundamental data structure in computer science and programming. In Go (Golang), linked lists are typically implemented as a sequence of nodes, each containing data and a reference to the next node. In this guide, we will explore the basics of implementing linked lists in Go, including creating, inserting, deleting, and traversing nodes. We'll provide sample Go code to help you understand the concept and its usage.

Basic Linked List Structure

In Go, we can create a basic linked list structure using a custom type for the nodes. Each node contains data and a pointer to the next node. Here's a simple definition of a linked list node:

                            package main
                import `fmt`
                type Node struct {
                    data int
                    next *Node
                }
                func main() {
                    // Create nodes
                    node1 := &Node{data: 10}
                    node2 := &Node{data: 20}
                    node3 := &Node{data: 30}
                    // Connect nodes
                    node1.next = node2
                    node2.next = node3
                    // Print the linked list
                    printLinkedList(node1)
                }
                func printLinkedList(node *Node) {
                    for node != nil {
                        fmt.Printf(`%d -> `, node.data)
                        node = node.next
                    }
                    fmt.Println(`nil`)
                }
                    

In this example, we've defined a basic linked list structure with three nodes and created a function to print the linked list's contents.

Insertion and Deletion

Linked lists allow for easy insertion and deletion of nodes. Here's an example of inserting a new node and deleting a node from the list:

                            func insertNodeAfter(existingNode *Node, newData int) *Node {
                    newNode := &Node{data: newData}
                    newNode.next = existingNode.next
                    existingNode.next = newNode
                    return newNode
                }
                func deleteNode(head *Node, targetData int) {
                    if head.data == targetData {
                        // Remove the head node
                        head = head.next
                    } else {
                        current := head
                        for current.next != nil {
                            if current.next.data == targetData {
                                current.next = current.next.next
                                break
                            }
                            current = current.next
                        }
                    }
                }
                    

These functions allow you to insert a new node after an existing node and delete a node by its data value.

Traversing a Linked List

Traversing a linked list means moving through its nodes to perform operations or access data. Here's how you can traverse a linked list in Go:

                            func traverseLinkedList(head *Node) {
                    current := head
                    for current != nil {
                        fmt.Printf(`%d -> `, current.data)
                        current = current.next
                    }
                    fmt.Println(`nil`)
                }
                    

This function iterates through the linked list and prints its elements.

Conclusion

Linked lists are fundamental data structures for organizing and manipulating data in Go. Understanding how to create, insert, delete, and traverse nodes in a linked list is essential for building more complex data structures and algorithms. Linked lists provide a foundation for various applications, including stacks, queues, and more.

Further Resources

To continue learning about linked lists and data structures in Go, consider these resources:

Written by Surfside Media

Senior Full Stack Developer specializing in Web Technologies.