• php实现一个单链表


      单链表,节点只有一个指针域的链表。节点包括数据域和指针域。

      因此用面向对象的思维,节点类的属性就有两个:一个data(表示存储的数据),一个指针next(链表中指向下一个节点)。

      链表一个很重要的特性,就是这个头节点$head。它绝对不能少,每次遍历都要从它开始,并且不能移动头节点,应该用一个变量去代替他移动。脑袋里要有链表的结构。这是关键。

      来一段代码:

      

     1 <?php
     2 
     3 class Node{
     4     public $data = '';
     5     public $next = null;
     6     function __construct($data)
     7     {
     8         $this->data = $data;
     9     }
    10 }
    11 
    12 
    13 // 链表有几个元素
    14 function countNode($head){
    15     $cur = $head;
    16     $i = 0;
    17     while(!is_null($cur->next)){
    18         ++$i;
    19         $cur = $cur->next;
    20     }
    21     return $i;
    22 }
    23 
    24 // 增加节点
    25 function addNode($head, $data){
    26     $cur = $head;
    27     while(!is_null($cur->next)){
    28         $cur = $cur->next;
    29     }
    30     $new = new Node($data);
    31     $cur->next = $new;
    32 
    33 }
    34 
    35 // 紧接着插在$no后
    36 function insertNode($head, $data, $no){
    37     if ($no > countNode($head)){
    38         return false;
    39     }
    40     $cur = $head;
    41     $new = new Node($data);
    42     for($i=0; $i<$no;$i++){
    43         $cur = $cur->next;
    44     }
    45     $new->next = $cur->next;
    46     $cur->next = $new;
    47 
    48 }
    49 
    50 // 删除第$no个节点
    51 function delNode($head, $no){
    52     if ($no > countNode($head)){
    53         return false;
    54     }
    55     $cur = $head;
    56     for($i=0; $i<$no-1; $i++){
    57         $cur = $cur->next;
    58     }
    59     $cur->next = $cur->next->next;
    60 
    61 }
    62 
    63 // 遍历链表
    64 function showNode($head){
    65     $cur = $head;
    66     while(!is_null($cur->next)){
    67         $cur = $cur->next;
    68         echo $cur->data, '<br/>';
    69     }
    70 }
    71 
    72 $head = new Node(null);// 定义头节点
    73 
    74 
    75 addNode($head, 'a');
    76 addNode($head, 'b');
    77 addNode($head, 'c');
    78 
    79 insertNode($head, 'd', 0);
    80 
    81 showNode($head);
    82 
    83 echo '<hr/>';
    84 
    85 delNode($head, 2);
    86 
    87 showNode($head);
  • 相关阅读:
    用扑克牌保存文本信息
    计算机网络7--报文交换
    算法——字符串匹配之BM算法
    Head First Python 学习笔记-Chapter3:文件读取和异常处理
    页面登陆框老是乱乱的?banner跨页图片缩小之后总是在側面不能显示主要部分?哈哈~我来帮你忙~~
    happens-before通俗理解
    Eclipse中Git插件还原文件
    集成 Tomcat 插件到 Eclipse 的过程
    深入理解ClassLoader(五)—类的卸载
    使用eclipse远程调试Tomcat的方法
  • 原文地址:https://www.cnblogs.com/firstForEver/p/5245534.html
Copyright © 2020-2023  润新知