php实现循环链表

<?php
/**
 * php实现链表
 * Date: 2018/5/18
 * Time: 下午5:59
 */

class Node
{
    public $nodeId = 0;
    public $left = 0;
    public $right = 0;

    public function __construct($nodeId, $left, $right)
    {
        $this->nodeId = $nodeId;
        $this->left = $left;
        $this->right = $right;
    }

}

class ListArr
{
    private $list = null;

    public function construct()
    {

    }

    //创造一个n长度链表
    public function createList($n)
    {
        if ($n <= 0) {
            return false;
        }

        for ($i = 0; $i < $n; $i++) {
            if ($i == 0) {
                $node = new Node(0, $n - 1, 1);
            } elseif ($i == $n - 1) {
                $node = new Node($n - 1, $n - 2, 0);
            } else {
                $node = new Node($i, $i - 1, $i + 1);
            }
            $this->list[$i] = $node;
        }
    }

    //遍历链表
    public function iteratorList()
    {
        $total = count($this->list);  //链表长度
        $strRet = '';
        for ($i = 0; $i < $total; $i++) {
            $node = $this->list[$i];
            echo  "current node : {$node->left}->{$node->nodeId}->{$node->right}\n";
        }
        echo $strRet;
    }

    //查找某一节点
    public function findNode($n)
    {
        if ($n < 0 ) {
            return false;
        }
        $total = count($this->list);
        if ($n > $total) {
            $n = $n % $total;
            $node = $this->list[$n - 1];
        } else {
            $node = $this->list[$n - 1];
        }
        echo "current Node is {$node->nodeId}  left is {$node->left} right is {$node->right}\n";
    }
}

$list = new ListArr();
$list->createList(5);
$list->findNode(3);
$list->findNode(6);
$list->iteratorList();

 

posted @ 2018-05-18 18:26  王大西  阅读(216)  评论(0编辑  收藏  举报