<?php
class Nodo
{
//variable que contiene el elemento a almacenar dentro del nodo
public $dato;
//variable que contiene el puntero con la posicion del siguiente nodo
public $proximo;
//funcion void para crear el nodo
public function __construct($elemento)
{
$this->dato = $elemento;
$this->proximo = null;
}
}
//Clase Lista Enlazada
class ListaEnlazada
{
//variable o puntero que apunta al primer nodo de la lista
public $primero = null;
//variable que almacena la cantidad de elementos dentro de la lista
private static $count = 0;
//funcion que cuenta los nodos dentro de la lista
public function ContarNodos()
{
return self::$count;
}
//funcion que inserta un nodo dentro de una lista vacia
public function InsertarPrimerovacia($elemento) {
$this->primero = new Nodo($elemento);
$this->proximo = null;
self::$count++;
}
//funcion que inserta un nodo en la primera posicion de una lista
public function InsertarPrimero($elemento) {
if ($this->primero == null) {
$this->primero = new Nodo($elemento);
} else {
$aux = new Nodo($elemento);
$aux->proximo = $this->primero;
$this->primero = $aux;
}
self::$count++;
}
//funcion que inserta un nodo en la ultima posicion de la lista
public function InsertarUltimo($elemento) {
if ($this->primero == null) {
$this->primero = new Nodo($elemento);
} else {
$actual = $this->primero;
while ($actual->proximo != null)
{
$actual = $actual->proximo;
}
$actual->proximo = new Nodo($elemento);
}
self::$count++;
}
//funcion que inserta un nodo despues de una posicion dada
public function InsertarDespues($elemento,$key){
if($key == 0){
$this->InsertarPrimero($elemento);
}
else{
$aux = new Nodo($elemento);
$actual = $this->primero;
$anterior = $this->primero;
for($i=0;$i<$key;$i++)
{
$anterior = $actual;
$actual = $actual->proximo;
}
$anterior->proximo = $aux;
$aux->proximo = $actual;
self::$count++;
}
}
//funcion que elimina el primer nodo de la lista
public function EliminarPrimero() {
if ($this->primero != null) {
$actual = $this->primero;
$this->primero = $actual->proximo;
}
self::$count--;
}
//funcion que elimina el nodo que ocupa la posicion que sigue a la posicion pasada por parametro
public function EliminarDespues($key){
if($key == 0){
$this->EliminarPrimero($elemento);
}
else{
$actual = $this->primero;
$anterior = $this->primero;
for($i=0;$i<$key;$i++)
{
$anterior = $actual;
$actual = $actual->proximo;
}
$anterior->proximo = $actual->proximo;
self::$count--;
}
}
//funcion que elimina el nodo cuyo dato coincide con el valor del parametro
public function EliminarNodo($key)
{
$actual = $anterior = $this->primero;
while($actual->dato != $key) {
$anterior = $actual;
$actual = $actual->proximo;
}
if ($actual == $anterior) {
$this->primero = $actual->proximo;
}
$anterior->proximo = $actual->proximo;
self::$count--;
}
//funcion que recorre la lista desde el primer nodo hasta e ultimo e imprime el dato dentro del nodo
public function ImprimirLista()
{
$elementos = [];
$actual = $this->primero;
while($actual != null) {
array_push($elementos, $actual->dato);
$actual = $actual->proximo;
}
$str = '';
foreach($elementos as $elemento)
{
$str .= $elemento . '->';
}
echo $str;
}
}
//Creamos la nueva
$lista=array();
$lista = new ListaEnlazada();
$lista->InsertarPrimerovacia(6);
$lista->InsertarDespues(32,1);
$lista->InsertarDespues(36,2);
$lista->InsertarDespues(86,3);
$lista->InsertarDespues(88,4);
$lista->InsertarDespues(158,5);
$lista->InsertarDespues(598,6);
$lista->InsertarDespues(796,7);
$lista->InsertarDespues(1,8);
$lista->InsertarDespues(13,9);
$lista->InsertarDespues(45,10);
$lista->InsertarDespues(59,11);
$lista->InsertarDespues(63,12);
$lista->InsertarDespues(95,13);
$lista->InsertarUltimo(701);
echo" Estos son los elementos ordenados desde los pares hasta los impares.<br>";
$lista->ImprimirLista();
echo "<br> Ahora eliminaremos el primer elemento.<br>";
$lista->EliminarPrimero();
$lista->ImprimirLista();
echo "<br> Ahora eliminaremos el ultimo.<br>";
$lista->EliminarNodo(701);
$lista->ImprimirLista();
echo "<br> Ahora eliminaremos el nodo que esta despues del nodo 5.<br>";
$lista->EliminarDespues(5);
$lista->ImprimirLista();
echo "<br>Insertar 10 elementos.<br>";
$lista->InsertarDespues(200,12);
$lista->InsertarDespues(201,13);
$lista->InsertarDespues(202,14);
$lista->InsertarDespues(203,15);
$lista->InsertarDespues(204,16);
$lista->InsertarDespues(205,17);
$lista->InsertarDespues(206,18);
$lista->InsertarDespues(207,19);
$lista->InsertarDespues(208,20);
$lista->InsertarUltimo(209);
$lista->ImprimirLista();
?>