PHP单链表

<?php

class Node{

private $_data;

private $_next = null;

function __construct($data){

$this->_data = $data;

}


function getData(){

   return $this->_data;

}


function getNext(){

   return $this->_next;

}


function setData($data){

   $this->_data = $data;

}


function setNext(Node $next){

   $this->_next = $next;

}

}


class LinkList{

    private $_head = null;

private $_tail = null;

private $_size = 0;

function __construct($data){

$this->addNode($data);

}


function addNode($data,$flag=0){

  if($this->_size > 0){

  $node = new Node($data);

      if($flag==0){

  $node->setNext($this->_head);

  $this->_head = $node;

  }else{

               $this->_tail->setNext($node);

  $this->_tail = $node;

  }

  }else{

           $this->_tail = $this->_head = new Node($data);

  }

  ++$this->_size;

}


function findNodeByPos($pos,&$node)

{

if($pos>$this->_size-1 || $pos < 0)

return null;

        $node = $this->_head;

for($i=0;$i<$pos;$i++){

$node = $node->getNext();

}

}


function insertNode($data,$pos = 0){

    if($pos == 0)

$this->addNode($data);

else if($pos >= $this->_size)

             $this->addNode($data,1);

else {

$this->findNodeByPos($pos-1,$node);

$newNode = new Node($data);

 $newNode->setNext($node->getNext());

             $node->setNext($newNode);

            

++$this->_size;

}

}


function delNode($data){

        $node = $this->_head;

if($node->getData() == $data){

            $this->_head = $note->getNext();

--$this->_size;

return true;

}

for($i=1;$i<$this->_size;$i++){

if($node->getNext()->getData() == $data){

   $node->setNext($node->getNext()->getNext());

break;

}

$node = $node->getNext();

}

if($i < $this->_size){

--$this->_size;

if($i == $this->_size-1){

$this->_tail = $node;

}

return true;

}

return false;

}


    function iterate(){

$node = $this->_head;

for($i=0;$i<$this->_size;$i++){

   echo 'data:',$node->getData(),'<br/>';

$node = $node->getNext();

}

}


function getSize(){

   return $this->_size;

}

}


$link = new LinkList('one');

$link->addNode('two');

$link->addNode('three');

$link->addNode('zero',1);

$link->insertNode('four',2);

$link->iterate();

//print_r($link);


转载于:https://my.oschina.net/u/196016/blog/263053

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值