zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    sql评估已过期
    解决电脑弹窗
    清除电脑缓存,解决电脑卡
    vant小程序实现表单提交(时间组件,弹出层组件)
    jquery每两秒执行函数
    git pull遇到错误:error: Your local changes to the following files would be overwritten by merge:
    阿里云服务器http转https
    微信小程序错误码40029
    1366:Incorrect string value: 'xE4xBBx8AxE5xA4xA9' for column 'content' at row 1 [ SQL语句 ] :
    每日一题 为了工作 2020 0308 第六题
  • 原文地址:https://www.cnblogs.com/firstForEver/p/5245534.html
Copyright © 2011-2022 走看看