DEV Community

Cover image for How To Create a Linked List Using Golang
J. R. Swab
J. R. Swab

Posted on • Originally published at jrswab.com

How To Create a Linked List Using Golang

Lately I started to practice my data structures to get a better grasp of programming. Today I chose to tackle the Linked List from scratch using Go. I have not had to write a linked list in forever which made this a great mental exercise.

Linked List Code Breakdown:

The first step I took was to create a struct. I know this struct needed to hold whatever data to store along with a link to the previous data. Here I set up the struct to hold an integer but this could be anything you want. The second is the link to the previous data and this has to be a pointer to an instance of the struct we just created.

type list struct {
    digi     int
    prevList *list
}
Enter fullscreen mode Exit fullscreen mode

I followed that with a push method attached to the list type we just created. This will allow us at add new data to the list without rewriting the code. It starts by creating a variable called current of the list type we created. current will hold the data we need to set as the next node in the list, including the integer passed in and the pointer to the list calling the method. Then the method returns the pointer of the newly created current node.

func (l *list) push(num int) *list {
    var current list
    current.digi = num
    current.prevList = l
    return &current
}
Enter fullscreen mode Exit fullscreen mode

Since I plan on turning this into a stack challenge, I followed the push method with a pop method. All this does is remove the most recent addition to the linked list by setting the previous data to the the current.

func (l *list) pop() {
    l.digi = l.prevList.digi
    l.prevList = l.prevList.prevList
}
Enter fullscreen mode Exit fullscreen mode

I then follow up with main() to execute the methods mentioned above.

Linked List in Golang:

package main

import "fmt"

type list struct {
    digi     int
    prevList *list
}

// push adds another number to the stack
func (l *list) push(num int) *list {
    var current list
    current.digi = num
    current.prevList = l
    return &current
}

// pop removes the top most member from the stack
func (l *list) pop() {
    l.digi = l.prevList.digi
    l.prevList = l.prevList.prevList
}

func main() {
    var top *list
    // Create parts 0-9 of the stack
    for i := 0; i < 10; i++ {
        top = top.push(i)
    }

    top = top.push(10)
    fmt.Println(*top.prevList.prevList)
    fmt.Println(*top.prevList)
    fmt.Println(*top)
    top.pop()
    fmt.Println(*top)
}
Enter fullscreen mode Exit fullscreen mode

Run the code at the Golang Playground

If you have any tips on how I can make this linked list more efficient please let me know in the comments. Also feel free to ask any questions!

Top comments (0)