<?php

//单链表的存储结构
class Node{
 public $data;//数据域
 public $next;//指针域 指向下一个结点
 function __construct(){
  $this->data = null;
  $this->next = null;
 }
}
//单链表数据类型
class LinkList{
 public $data;
 public $next;
 
 function __construct(){
  $this->data = null;
  $this->next = null;
 }
 
 //头插法创建整个单链表
 public function CreateListHead($arr){
  if (is_array($arr)){
      foreach($arr as $value){
       $p = new Node();
       $p->data = $value;
       $p->next = $this->next;
       $this->next = $p;  
      }
  } else {
   return 'false';
  }
 }
 
 //尾插法创建整个单链表
 public function CreateListTail(array $arr){
  $r = $this;       //记录末尾结点
  foreach ($arr as $value){
   $p = new Node();
   $p->data = $value;
   $r->next = $p;
   $r = $p;
  }
  $r->next = null;
 }
 
 //单链表的整表删除
 public function ClearList(){
  $p = $this->next;
  while ($p) {
   $q = $p->next;
   unset($p);
   $p = $q;
  }
  $this->next = null;
  return 'ok';
 }

 //获取第i个结点值

 public function GetElem($i){
  $p = $this->next;
  $j = 1;
  while($p && $j < $i){
   $p = $p->next;
   ++$j;
  }
  if(!$p || $j > $i){
   return 'error';
  }
  return $p->data;
 }
 
 //删除第i个结点
 public function ListDelete($i){
  $j = 1;
  $p = $this;
  while ($p->next && $j < $i){
   $p = $p->next;
   ++$j;
  }
  if(!($p->next) || $j > $i){
   return 'error';
  }
  $q = $p->next;
  $p->next = $q->next;
  unset($q);
  return 'ok';
 }
 
 //第i个节点前插入数据值为value的节点
 public function ListInsert($i, $value){
  $j = 1;
  $p = $this;
  while($p && $j < $i){
   $p = $p->next;
   ++$j;
  }
  if(!$p || $j > $i){
   return 'error';
  }
  $s = new Node();
  $s->data = $value;
  $s->next = $p->next;
  $p->next = $s;
  return 'ok';
 }
}