Linked List Operations in PHP

Lesson Overview

Welcome to our tutorial focusing on Linked List Operations in PHP. Singly-Linked Lists are among the most fundamental data structures used in computer science. They provide an efficient way to store and access data that is not necessarily contiguous in memory. This ability distinguishes linked lists from arrays, making them an indispensable tool in a programmer's toolkit.

LinkedList Definition

To work with linked lists in PHP, we need to define a ListNode class, which represents a node in the linked list.

PHP
class ListNode {
    public $value;
    public $next;

    public function __construct($value) {
        $this->value = $value;  // Holds the value or data of the node
        $this->next = null;     // Points to the next node in the linked list; default is null
    }
}

// Initialization of linked list
class LinkedListExample {
    public static function main() {
        $head = new ListNode(1);
        $head->next = new ListNode(2);
        $head->next->next = new ListNode(3);
        $head->next->next->next = new ListNode(4);
        $head->next->next->next->next = new ListNode(5);
    }
}

In the ListNode class:

  • $value holds the data of the node.
  • $next is a reference to the next node in the linked list. It is null by default, meaning the node does not point to any other node when it's freshly created.

To understand this, consider that a linked list is a linear data structure where each element is a separate object known as a node. A node comprises data and a reference (link) to the next node in the sequence.

The provided code creates a linked list in which each node points to the next as follows: 1 -> 2 -> 3 -> 4 -> 5, and the last node points to null.

Task Example

One example of a problem to practice involves reversing a linked list, a common operation in interviews and the industry. To reverse a linked list, we'll need to sequentially rearrange the next link of each node to point toward its previous node.

Here is what the code might look like. Note that this code uses O(1)O(1) of additional memory:

PHP
class ListNode {
    public $value;
    public $next;

    public function __construct($value) {
        $this->value = $value;
        $this->next = null;
    }
}

class ReverseLinkedList {
    public static function reverseLinkedList($head) {
        $prev = null;
        $current = $head;
        while ($current !== null) {
            $nextNode = $current->next;
            $current->next = $prev;
            $prev = $current;
            $current = $nextNode;
        }
        return $prev;
    }

    // Test
    public static function main() {
        $head = new ListNode(1);
        $head->next = new ListNode(2);
        $head->next->next = new ListNode(3);
        $head->next->next->next = new ListNode(4);
        $head->next->next->next->next = new ListNode(5);

        $reversedHead = self::reverseLinkedList($head);
        while ($reversedHead !== null) {
            echo $reversedHead->value . " ";
            $reversedHead = $reversedHead->next;  // Output: 5 4 3 2 1
        }
    }
}
Sign up

Join the 1M+ learners on CodeSignal

Be a part of our community of 1M+ users who develop and demonstrate their skills on CodeSignal