<?php
class LinkedListObject {
public $previous;
public $next;
public $data;
/* Initialization of linked list object */
public function __construct() {
$this->previous = 0;
$this->data = NULL;
}
}
class LinkedList extends LinkedListObject {
public $len;
public $head;
public $tail;
/* Initialization of linked list */
public function __construct() {
$this->len = 0;
$this->head = NULL;
$this->tail = NULL;
}
}
function linked_list_create() {
$ll = new LinkedList;
return $ll;
}
function linked_list_object_create() {
$ll_object = new LinkedListObject;
return $ll_object;
}
function linked_list_append(&$ll, $item) {
$appendant = linked_list_object_create();
$appendant->data = $item;
$appendant->previous = $ll->tail;
if($ll->head == NULL) {
$ll->head = $appendant;
}
$ll->tail->next = $appendant;
$ll->tail = $appendant;
/* Additional node with length plus one */
$ll->len++;
}
function linked_list_len($ll) {
return $ll->len;
}
$ll = linked_list_create();
for($num = 1; $num <= 10; $num++) {
linked_list_append($ll, $num);
}
$tmp = $ll->tail;
while(1) {
if($tmp->previous != NULL) {
$tmp = $tmp->previous;
} else {
break;
}
}
printf("%d", $ll->tail->data);
?>
PD9waHAKCmNsYXNzIExpbmtlZExpc3RPYmplY3QgewogCiBwdWJsaWMgJHByZXZpb3VzOwogcHVibGljICRuZXh0OwogcHVibGljICRkYXRhOwoKIC8qIEluaXRpYWxpemF0aW9uIG9mIGxpbmtlZCBsaXN0IG9iamVjdCAqLwogcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkgewogICAkdGhpcy0+cHJldmlvdXMgPSAwOwogICAkdGhpcy0+bmV4dCA9IE5VTEw7CiAgICR0aGlzLT5kYXRhID0gTlVMTDsgICAKIH0gICAKfQoKY2xhc3MgTGlua2VkTGlzdCBleHRlbmRzIExpbmtlZExpc3RPYmplY3QgewogcHVibGljICRsZW47CiBwdWJsaWMgJGhlYWQ7IAogcHVibGljICR0YWlsOwoKIC8qIEluaXRpYWxpemF0aW9uIG9mIGxpbmtlZCBsaXN0ICovCiBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7CiAgICR0aGlzLT5sZW4gPSAwOwogICAkdGhpcy0+aGVhZCA9IE5VTEw7CiAgICR0aGlzLT50YWlsID0gTlVMTDsgICAKIH0KfQoKZnVuY3Rpb24gbGlua2VkX2xpc3RfY3JlYXRlKCkgeyAgIAogCiAkbGwgPSBuZXcgTGlua2VkTGlzdDsKICAgCiByZXR1cm4gJGxsOwp9CgpmdW5jdGlvbiBsaW5rZWRfbGlzdF9vYmplY3RfY3JlYXRlKCkgewoKICRsbF9vYmplY3QgPSBuZXcgTGlua2VkTGlzdE9iamVjdDsKICAgCiByZXR1cm4gJGxsX29iamVjdDsKCn0KCmZ1bmN0aW9uIGxpbmtlZF9saXN0X2FwcGVuZCgmJGxsLCAkaXRlbSkgewoKICRhcHBlbmRhbnQgPSBsaW5rZWRfbGlzdF9vYmplY3RfY3JlYXRlKCk7CiAkYXBwZW5kYW50LT5kYXRhID0gJGl0ZW07CiAkYXBwZW5kYW50LT5wcmV2aW91cyA9ICRsbC0+dGFpbDsKICRhcHBlbmRhbnQtPm5leHQgPSBOVUxMOwoKICBpZigkbGwtPmhlYWQgPT0gTlVMTCkgewogICAkbGwtPmhlYWQgPSAkYXBwZW5kYW50OwogfQoKICAkbGwtPnRhaWwtPm5leHQgPSAkYXBwZW5kYW50OwogCiAgJGxsLT50YWlsID0gJGFwcGVuZGFudDsKIAogLyogQWRkaXRpb25hbCBub2RlIHdpdGggbGVuZ3RoIHBsdXMgb25lICovCiAkbGwtPmxlbisrOwoKIHVuc2V0KCRsbCk7Cgp9CgpmdW5jdGlvbiBsaW5rZWRfbGlzdF9sZW4oJGxsKSB7CiAgcmV0dXJuICRsbC0+bGVuOwp9CgokbGwgPSBsaW5rZWRfbGlzdF9jcmVhdGUoKTsKCmZvcigkbnVtID0gMTsgJG51bSA8PSAxMDsgJG51bSsrKSB7CiAgbGlua2VkX2xpc3RfYXBwZW5kKCRsbCwgJG51bSk7Cn0KJHRtcCA9ICRsbC0+dGFpbDsKCndoaWxlKDEpIHsgICAKICBwcmludGYoIiVkXG4iLCAkdG1wLT5kYXRhKTsKICAKICBpZigkdG1wLT5wcmV2aW91cyAhPSBOVUxMKSB7CiAgICAkdG1wID0gJHRtcC0+cHJldmlvdXM7CiAgfSBlbHNlIHsKICAgIGJyZWFrOwogIH0gCn0KcHJpbnRmKCIlZFxuIiwgJHRtcC0+ZGF0YSk7CnVuc2V0KCR0bXApOwpwcmludGYoIiVkXG4iLCAkdG1wLT5kYXRhKTsKCnByaW50ZigiJWQiLCAkbGwtPnRhaWwtPmRhdGEpOwogCj8+