zoukankan      html  css  js  c++  java
  • php实现简单的单链表

    <?php
    /**
     * 建立一个链表,节点的data为数组,记录一个id,完成链表所以操作
     */
    
    //结点,结点数据data定义为一个数组,id和value
    class Node{
    	public $data;
    	public $next;
    	
    	public function __construct($data,$next=null){
    		$this->data = $data;
    		$this->next = $next;
    	}
    }
    
    class Linklist{
    	public $header;
    	
    	public function __construct(){
    		$this->header = new Node(null);
    	}
    	
    	//向尾部添加结点
    	public function add(Node $node){
    		$current = $this->header;
    		while ($current->next !==null) {
    			$current = $current->next;
    		}
    		$current->next = $node;
    	}
    	
    	//遍历列表,打印结点
    	public function show(){
    		$current = $this->header;
    		while ($current->next !== null){
    			//print_r($current->next->data);
    			//echo "<br/>";
    			echo $current->next->data['value'];
    			$current = $current->next;
    		}
    	}
    	
    	//获取链表长度,不含头结点(空)
    	public function getLength(){
    		$len = 0;
    		$current = $this->header;
    		while ($current->next !== null) {
    			$len++;
    			$current = $current->next;
    		}
    		return $len;
    	}
    	
    	//查找value是否在list中,存在返回id,否则false
    	public function find($value){
    		$current = $this->header;
    		$flag = 0;
    		while ($current->next!==null){
    			if($value == $current->next->data['value']){
    				$flag = 1;
    				$id = $current->next->data['id'];
    				break;
    			}
    			$current = $current->next;
    		}
    		if($flag == 0){
    			return false;
    		}else{
    			return $id;
    		}
    	}
    	
    	//插入一个结点,在id之前
    	public function insert(Node $node,$id){
    		$current = $this->header;
    		while ($current->next!==null){
    			if($id == $current->next->data['id']){
    				$tmp = $current->next;
    				$current->next = $node;
    				$current->next->next = $tmp;
    				break;
    			}
    			$current = $current->next;
    		}
    	}
    	
    	//删除一个结点(第一个出现的)
    	public function del($id){
    		$current = $this->header;
    		while ($current->next!=null){
    			if($current->next->data['id'] == $id){
    				$current->next = $current->next->next;
    				break;
    			}
    			$current = $current->next;
    		}
    	}
    	
    	//更新结点value
    	public function update($id,$value){
    		$current = $this->header;
    		while ($current->next !==null){
    			if($current->next->data['id'] == $id){
    				$current->next->data['value'] = $value;
    			}
    			$current = $current->next;
    		}
    	}
    }
    
    class Client{
    	public static function main(){
    		$list = new LinkList();
    		$data1 = array(
    			'id'=>1,
    		    'value'=>'hello ',
    		);
    		$data2 = array(
    			'id'=>2,
    			'value'=>'world',
    		);
    		$data3 = array(
    			'id'=>3,
    			'value'=>'!',
    		);
    		
    		$node1 = new Node($data1);
    		$node2 = new Node($data2);
    		$node3 = new Node($data3);
    
    		$list->add($node1);
    		$list->add($node2);
    		$list->add($node3);
    		
    //		$list->show();
    //		echo "<br/>";
    		
    		$node4 = new Node($data3);
    		$list->insert($node4, 2);
    		//$list->del(3);
    		$list->update(3, '!!!');
    		$list->show();
    		echo "<br/>";
    		
    	}
    }
    
    Client::main();
    ?>
    

      增加结点、删除结点、查找结点、修改结点、获取长度,遍历均实现。

  • 相关阅读:
    leetcode33. Search in Rotated Sorted Array
    pycharm 设置sublime text3 monokai主题
    django class Meta
    leetcode30, Substring With Concatenation Of All Words
    Sublime text3修改tab键为缩进为四个空格,
    sublime text3 python打开图像的问题
    安装上imesupport输入法依然不跟随的解决办法,
    sublime text3 的插件冲突弃用问题,
    sublime text3 BracketHighlighter括号匹配的设置
    windows 下wget的使用
  • 原文地址:https://www.cnblogs.com/taijun/p/4094486.html
Copyright © 2011-2022 走看看