Implement linked list in php

后端 未结 8 672
小蘑菇
小蘑菇 2020-12-08 05:22

How should I implement a linked list in PHP? Is there a implementation built in into PHP?

I need to do a lot of insert and delete operations, and at same time I need

相关标签:
8条回答
  • 2020-12-08 05:47
    // Here's a basic implementation of SplDoublyLinkedList using PHP.
    $splDoubleLinkedList = new SplDoublyLinkedList();
    $splDoubleLinkedList->push('a');
    $splDoubleLinkedList->push('3');
    $splDoubleLinkedList->push('v');
    $splDoubleLinkedList->push('1');
    $splDoubleLinkedList->push('p');
    // $splDoubleLinkedList->unshift('10');
    // $splDoubleLinkedList->pop();
    $splDoubleLinkedList->add(3, 3.0);
    // First of all, we need to rewind list.
    $splDoubleLinkedList->rewind();
    // Use while, check if the list has valid node.
    while($splDoubleLinkedList->valid()){
      // Print current node's value.
       echo $splDoubleLinkedList->current()."\n";
     // Turn the cursor to next node.
     $splDoubleLinkedList->next();
    }
    
    0 讨论(0)
  • 2020-12-08 05:55

    Here is another Linked list implementation using an array of elements. The add function keeps the elements sorted.

    <?php
    
    class LinkedList{
    
        private $_head = null;
        private $_list = array();
    
        public function addNode($val) {
    
            // add the first element
            if(empty($this->_list)) {
                $this->_head = $val;
                $this->_list[$val] = null;
                return;
            }
    
            $curr = $this->_head;
    
            while ($curr != null || $curr === 0) {
    
                // end of the list
                if($this->_list[$curr] == null) {
                    $this->_list[$curr] = $val;
                    $this->_list[$val] = null;
                    return;
                }
    
                if($this->_list[$curr] < $val) {
                    $curr = $this->_list[$curr];
                    continue;
                }
                $this->_list[$val] = $this->_list[$curr];
                $this->_list[$curr] = $val;
                return;
    
            }
    
        }
    
        public function deleteNode($val) {
    
            if(empty($this->_list)) {
                return;
            }
    
            $curr = $this->_head;
    
            if($curr == $val) {
    
                $this->_head = $this->_list[$curr];
                unset($this->_list[$curr]);
    
                return;
            }
    
            while($curr != null || $curr === 0) {
    
                // end of the list
                if($this->_list[$curr] == null) {
                    return;
                }
    
                if($this->_list[$curr] == $val) {
                    $this->_list[$curr] = $this->_list[$val];
                    unset($this->_list[$val]);
                    return; 
                }
    
                $curr = $this->_list[$curr];
            }
        }
    
        function showList(){
            $curr = $this->_head;
            while ($curr != null || $curr === 0) {
                echo "-" . $curr;
                $curr = $this->_list[$curr];
            }
    
    
        }
    }
    
    $list = new LinkedList();
    
    $list->addNode(0);
    $list->addNode(3);
    $list->addNode(7);
    $list->addNode(5);
    $list->addNode(2);
    $list->addNode(4);
    $list->addNode(10);
    
    $list->showList();
    
    echo PHP_EOL;
    $list->deleteNode(3);
    
    $list->showList();
    
    echo PHP_EOL;
    
    $list->deleteNode(0);
    
    $list->showList();
    
    echo PHP_EOL;
    

    The output is:

    -0-2-3-4-5-7-10

    -0-2-4-5-7-10

    -2-4-5-7-10

    0 讨论(0)
提交回复
热议问题