<?php
class ListNode
{
public $val;
public $nxt;
function __construct($val)
{
$this->val = $val;
$this->nxt = NULL;
}
function readNode()
{
return $this->val;
}
}
class ReverseLinkedList
{
private $first;
private $last;
private $count;
function __construct()
{
$this->first = NULL;
$this->last = NULL;
}
//insert First Node
public function insertFirst($val)
{
$link = new ListNode($val);
$link->nxt = $this->first;
$this->first = &$link;
if($this->last == NULL)
$this->last = &$link;
}
public function show()
{
$cur = $this->first;
while($cur != NULL)
{
$cur = $cur->nxt;
}
foreach($listval as $v){
echo $v." ";
}
}
public function reverseLinkedList()
{
if($this->first != NULL)
{
if($this->first->nxt != NULL)
{
$cur = $this->first;
$new = NULL;
while ($cur != NULL)
{
$temp = $cur->nxt;
$cur->nxt = $new;
$new = $cur;
$cur = $temp;
}
$this->first = $new;
}
}
}
//insertion at ith key
public function insert($NewItem,$key)
{
if($key == 0){
$this->insertFirst($NewItem);
}
else
{
$link = new ListNode($NewItem);
$cur = $this->first;
$previous = $this->first;
for($i=0;$i<$key;$i++)
{
$previous = $cur;
$cur = $cur->nxt;
}
$previous->nxt = $link;
$link->nxt = $cur;
}
}
}
$o = new ReverseLinkedList();
//$o->insertFirst($value);
//$o->insert($value,$key); // at any index
$o->insertFirst(1);
$o->insert(2,1);
$o->insert(3,2);
$o->insert(4,3);
$o->insert(5,4);
$o->reverseLinkedList();
$o->show();
PD9waHAKY2xhc3MgTGlzdE5vZGUKewogICAgcHVibGljICR2YWw7CiAgICBwdWJsaWMgJG54dDsKICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR2YWwpCiAgICB7CiAgICAgICAgJHRoaXMtPnZhbCA9ICR2YWw7CiAgICAgICAgJHRoaXMtPm54dCA9IE5VTEw7CiAgICB9CgogICAgZnVuY3Rpb24gcmVhZE5vZGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsOwogICAgfQp9CgpjbGFzcyBSZXZlcnNlTGlua2VkTGlzdAp7CiAgICBwcml2YXRlICRmaXJzdDsKICAgIHByaXZhdGUgJGxhc3Q7CiAgICBwcml2YXRlICRjb3VudDsKCiAgICBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICAgICAgJHRoaXMtPmZpcnN0ID0gTlVMTDsKICAgICAgICAkdGhpcy0+bGFzdCA9IE5VTEw7CiAgICAgICAgJHRoaXMtPmNvdW50ID0gMDsKICAgIH0KCiAgICAvL2luc2VydCBGaXJzdCBOb2RlCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5zZXJ0Rmlyc3QoJHZhbCkKICAgIHsKICAgICAgICAkbGluayA9IG5ldyBMaXN0Tm9kZSgkdmFsKTsKICAgICAgICAkbGluay0+bnh0ID0gJHRoaXMtPmZpcnN0OwogICAgICAgICR0aGlzLT5maXJzdCA9ICYkbGluazsKCiAgICAgICAgaWYoJHRoaXMtPmxhc3QgPT0gTlVMTCkKICAgICAgICAgICAgJHRoaXMtPmxhc3QgPSAmJGxpbms7CiAgICAgICAgICAgICR0aGlzLT5jb3VudCsrOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzaG93KCkKICAgIHsKICAgICAgICAkbGlzdHZhbCA9IGFycmF5KCk7CiAgICAgICAgJGN1ciA9ICR0aGlzLT5maXJzdDsKICAgICAgICB3aGlsZSgkY3VyICE9IE5VTEwpCiAgICAgICAgewogICAgICAgICAgICBhcnJheV9wdXNoKCRsaXN0dmFsLCAkY3VyLT5yZWFkTm9kZSgpKTsKICAgICAgICAgICAgJGN1ciA9ICRjdXItPm54dDsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCgkbGlzdHZhbCBhcyAkdil7CiAgICAgICAgICAgIGVjaG8gJHYuIiAiOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV2ZXJzZUxpbmtlZExpc3QoKQogICAgewogICAgICAgIGlmKCR0aGlzLT5maXJzdCAhPSBOVUxMKQogICAgICAgIHsKICAgICAgICAgICAgaWYoJHRoaXMtPmZpcnN0LT5ueHQgIT0gTlVMTCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJGN1ciA9ICR0aGlzLT5maXJzdDsKICAgICAgICAgICAgICAgICRuZXcgPSBOVUxMOwoKICAgICAgICAgICAgICAgIHdoaWxlICgkY3VyICE9IE5VTEwpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJHRlbXAgPSAkY3VyLT5ueHQ7CiAgICAgICAgICAgICAgICAgICAgJGN1ci0+bnh0ID0gJG5ldzsKICAgICAgICAgICAgICAgICAgICAkbmV3ID0gJGN1cjsKICAgICAgICAgICAgICAgICAgICAkY3VyID0gJHRlbXA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdGhpcy0+Zmlyc3QgPSAkbmV3OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKCiAgICAvL2luc2VydGlvbiBhdCBpdGgga2V5CiAgICBwdWJsaWMgZnVuY3Rpb24gaW5zZXJ0KCROZXdJdGVtLCRrZXkpCiAgICB7CiAgICAgICAgaWYoJGtleSA9PSAwKXsKICAgICAgICAkdGhpcy0+aW5zZXJ0Rmlyc3QoJE5ld0l0ZW0pOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgICRsaW5rID0gbmV3IExpc3ROb2RlKCROZXdJdGVtKTsKICAgICAgICAkY3VyID0gJHRoaXMtPmZpcnN0OwogICAgICAgICRwcmV2aW91cyA9ICR0aGlzLT5maXJzdDsKCiAgICAgICAgZm9yKCRpPTA7JGk8JGtleTskaSsrKQogICAgICAgIHsgICAgICAgCiAgICAgICAgICAgICAgICAkcHJldmlvdXMgPSAkY3VyOwogICAgICAgICAgICAgICAgJGN1ciA9ICRjdXItPm54dDsKICAgICAgICB9CgogICAgICAgICAgICRwcmV2aW91cy0+bnh0ID0gJGxpbms7CiAgICAgICAgICAgJGxpbmstPm54dCA9ICRjdXI7IAogICAgICAgICAgICR0aGlzLT5jb3VudCsrOwogICAgfQoKICAgIH0gICAKfQoKJG8gPSBuZXcgUmV2ZXJzZUxpbmtlZExpc3QoKTsKLy8kby0+aW5zZXJ0Rmlyc3QoJHZhbHVlKTsKLy8kby0+aW5zZXJ0KCR2YWx1ZSwka2V5KTsgLy8gYXQgYW55IGluZGV4Cgokby0+aW5zZXJ0Rmlyc3QoMSk7CiRvLT5pbnNlcnQoMiwxKTsKJG8tPmluc2VydCgzLDIpOwokby0+aW5zZXJ0KDQsMyk7CiRvLT5pbnNlcnQoNSw0KTsKJG8tPnJldmVyc2VMaW5rZWRMaXN0KCk7CiRvLT5zaG93KCk7