PHP实现链表的增删改查

原创
2013/08/19 07:29
阅读数 135
<?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);

?>
展开阅读全文
打赏
0
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部