PHP实现链表的增删改查

<?php 
/**
 * PHP实现链表的基本操作
 */
class linkList {
    /**
     * 姓名
     * @var string
     */
    public $name = '';
    
    /**
     * 编号
     * @var int
     */
    public $id = 0;
    
    /*
     * 引用下一个对象
     */
    public $next = null;
    
    /**
     * 构造函数初始化数据
     * @param int $id
     * @param string $name
     */
    public function __construct($id = 0, $name = '') {
        $this->name = $name;
        $this->id   = $id;
    }
    
    /**
     * 遍历链表
     */
    public static function echo_link_list($head) {
        $curr = $head;
        while ($curr->next != null) {
            echo '姓名:'.$curr->next->name, ' 编号:'.$curr->next->id;
            echo '<br>';
            $curr = $curr->next;
        }
    }
    
    /**
     * 添加新节点
     */
    public static function add($head, $id, $name) {
        $curr = $head;
        $obj = new linkList($id, $name);
        
        while ($curr->next != null) {
            // 如果当前ID < 下一个ID,则添加到中间,添加节点到指定顺序位置
            if ($curr->next->id > $id) {
                
                $obj->next = $curr->next;
                $curr->next = $obj;
                
                return true;
            } else if ($curr->next->id == $id) {
                
                echo '当前Id:'.$id.'重复了,请不要继续添加了!';
                echo '<br>';
                
                return false;
            }
            $curr = $curr->next;
        }
        // 添加节点到尾部
        if ($curr->next == null) {
            $curr->next = $obj;
        }
    }
    
    /**
     * 删除节点
     */
    public static function del($head, $id) {
        $curr = $head;
        
        while($curr->next != null) {
            if ($curr->next->id == $id) {
                $curr->next = $curr->next->next;
                return true;
            }
            $curr = $curr->next;
        }
    }
    
    /**
     * 修改节点
     */
    public static function edit($head, $id, $new_name) {
        $curr = $head;
        
        while($curr->next != null) {
            if ($curr->next->id == $id) {
                $curr->next->name = $new_name;
            }
            $curr = $curr->next;
        }
    }
}

$head = new linkList();
linkList::add($head, 1, 'wangdk');
linkList::add($head, 2, 'sunshuzhen');
linkList::add($head, 8, 'wanghaha');
linkList::add($head, 6, 'wangchufen');
linkList::add($head, 6, 'wangchufen');
linkList::add($head, 3, 'wangdaye');

linkList::del($head, 1);
linkList::edit($head, 2, 'hahaha');
linkList::echo_link_list($head);

?>

转载于:https://my.oschina.net/wangdk/blog/155184

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值