Bird
Raised Fist0
DSA Goprogramming~5 mins

Creating a Singly Linked List from Scratch in DSA Go - Revision Summary

Choose your learning style10 modes available
Recall & Review
beginner
What is a singly linked list?
A singly linked list is a chain of nodes where each node holds data and a link to the next node. It starts at a head node and ends when a node points to nil, meaning no next node.
Click to reveal answer
beginner
In a singly linked list, what does each node contain?
Each node contains two parts: the data (value) and a pointer (link) to the next node in the list.
Click to reveal answer
intermediate
How do you add a new node at the end of a singly linked list?
To add a node at the end, you create the new node, then find the last node (which points to nil), and update its next pointer to the new node.
Click to reveal answer
beginner
What is the role of the 'head' in a singly linked list?
The head is the first node of the list. It is the starting point to access all other nodes by following their next pointers.
Click to reveal answer
intermediate
Why can't you traverse a singly linked list backwards easily?
Because each node only points to the next node, there is no link to the previous node. So, you can only move forward from the head.
Click to reveal answer
What does the 'next' pointer in a singly linked list node point to?
AThe head node
BThe previous node in the list
CThe next node in the list
DThe last node in the list
What value does the 'next' pointer of the last node in a singly linked list hold?
ANil (no next node)
BPointer to the head
CPointer to the previous node
DPointer to a random node
Which operation is easiest to perform in a singly linked list?
ATraverse backwards and forwards
BTraverse backwards
CInsert before a given node
DInsert at the beginning
What is the time complexity to find the last node in a singly linked list?
AO(n)
BO(n^2)
CO(log n)
DO(1)
Which of these is NOT a part of a singly linked list node?
AData
BPrevious pointer
CNext pointer
DNone of the above
Explain how to create a singly linked list from scratch and add nodes to it.
Think about how each node connects and how the head helps start the list.
You got /5 concepts.
    Describe the process to traverse a singly linked list and print all its elements.
    Imagine walking through a chain, one link at a time.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of a singly linked list in data structures?
      easy
      A. To store elements in a hash table for fast lookup
      B. To store elements in a tree-like structure with multiple branches
      C. To store elements in a fixed-size array for quick access
      D. To store elements in a linear order where each element points to the next

      Solution

      1. Step 1: Understand singly linked list structure

        A singly linked list stores elements in nodes where each node points to the next node, forming a chain.
      2. Step 2: Compare with other data structures

        Unlike trees or arrays, singly linked lists have a linear sequence with pointers only to the next element.
      3. Final Answer:

        To store elements in a linear order where each element points to the next -> Option D
      4. Quick Check:

        Singly linked list = linear chain with next pointers [OK]
      Hint: Remember: singly linked list nodes point only forward [OK]
      Common Mistakes:
      • Confusing singly linked list with trees or arrays
      • Thinking nodes have pointers to previous nodes
      • Assuming fixed size storage like arrays
      2. Which of the following is the correct way to define a node struct for a singly linked list in Go?
      easy
      A. type Node struct { value int; next *Node }
      B. type Node struct { value int; prev *Node }
      C. type Node struct { value int; next Node }
      D. type Node struct { value int; next interface{} }

      Solution

      1. Step 1: Identify correct pointer usage

        In Go, the next node must be a pointer to Node, so *Node is correct.
      2. Step 2: Check struct fields

        Field 'value' stores data, 'next' points to the next node. 'prev' is for doubly linked lists, and 'interface{}' is too generic.
      3. Final Answer:

        type Node struct { value int; next *Node } -> Option A
      4. Quick Check:

        Node next pointer = *Node [OK]
      Hint: Use *Node for next pointer in Go struct [OK]
      Common Mistakes:
      • Using value type instead of pointer for next
      • Confusing singly linked list with doubly linked list (prev pointer)
      • Using interface{} instead of *Node for next
      3. What will be the output of the following Go code that creates a singly linked list with nodes 1 -> 2 -> 3?
      package main
      import "fmt"
      type Node struct {
        value int
        next  *Node
      }
      func main() {
        head := &Node{value: 1}
        second := &Node{value: 2}
        third := &Node{value: 3}
        head.next = second
        second.next = third
        current := head
        for current != nil {
          fmt.Print(current.value)
          if current.next != nil {
            fmt.Print(" -> ")
          }
          current = current.next
        }
        fmt.Println(" -> null")
      }
      medium
      A. 1 -> 2 -> null
      B. 3 -> 2 -> 1 -> null
      C. 1 -> 2 -> 3 -> null
      D. Compilation error

      Solution

      1. Step 1: Trace node creation and linking

        Nodes with values 1, 2, 3 are created and linked in order: head.next = second, second.next = third.
      2. Step 2: Trace printing loop

        Loop prints current.value, then ' -> ' if next exists, moving from head to third, then prints ' -> null'.
      3. Final Answer:

        1 -> 2 -> 3 -> null -> Option C
      4. Quick Check:

        Print nodes in order 1,2,3 with arrows [OK]
      Hint: Follow next pointers from head to end [OK]
      Common Mistakes:
      • Printing nodes in reverse order
      • Missing last node in output
      • Confusing pointer assignments causing nil errors
      4. Identify the error in this Go code snippet that tries to append a new node with value 4 to the end of a singly linked list:
      func appendNode(head *Node, val int) {
        newNode := &Node{value: val}
        current := head
        for current.next != nil {
          current = current.next
        }
        current = newNode
      }
      medium
      A. The loop condition should be current != nil instead of current.next != nil
      B. The new node is not linked to the list; current pointer is reassigned incorrectly
      C. The new node should be created with next pointing to head
      D. The function should return the new head pointer

      Solution

      1. Step 1: Analyze the loop and pointer update

        The loop correctly finds the last node where current.next is nil.
      2. Step 2: Check how new node is linked

        Assigning current = newNode only changes the local variable, not the last node's next pointer. It should be current.next = newNode.
      3. Final Answer:

        The new node is not linked to the list; current pointer is reassigned incorrectly -> Option B
      4. Quick Check:

        Link new node by current.next = newNode [OK]
      Hint: Assign new node to current.next, not current [OK]
      Common Mistakes:
      • Reassigning current instead of current.next
      • Wrong loop condition causing nil pointer dereference
      • Not returning updated head when needed
      5. You want to create a function in Go that reverses a singly linked list. Which approach correctly reverses the list by changing the next pointers?
      func reverseList(head *Node) *Node {
        var prev *Node = nil
        current := head
        for current != nil {
          nextTemp := current.next
          current.next = prev
          prev = current
          current = nextTemp
        }
        return prev
      }
      What will be the output if the original list is 1 -> 2 -> 3 -> null and you print the reversed list?
      hard
      A. 3 -> 2 -> 1 -> null
      B. 1 -> 2 -> 3 -> null
      C. null
      D. Runtime error due to nil pointer

      Solution

      1. Step 1: Understand reversal logic

        The function iterates through the list, reversing each node's next pointer to point to the previous node.
      2. Step 2: Trace reversal on list 1 -> 2 -> 3

        After reversal, the list becomes 3 -> 2 -> 1 -> null, and prev points to new head.
      3. Final Answer:

        3 -> 2 -> 1 -> null -> Option A
      4. Quick Check:

        Reversed list head = prev = 3 [OK]
      Hint: Reverse pointers by tracking prev, current, next [OK]
      Common Mistakes:
      • Not updating current.next correctly
      • Losing track of next node causing infinite loop
      • Returning old head instead of new head
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard