zoukankan      html  css  js  c++  java
  • PHP 逆转单链表

     1 <?php
     2     #逆转单链表
     3     class Node {
     4         public $data = null;
     5         public $next = null;
     6     }
     7 
     8     #递归版本
     9     #思想是一直递归到倒数第二个非空节点,并将其next->next指向自己,将自己的next指向null
    10     #为了获得逆转后的头结点,在最后一个非空节点,即cnode->next == null时,将节点返回
    11     function reverse_list_r($node) {
    12         if ($node->next == null) {
    13             return $node;
    14         } else {
    15             $head = reverse_list_r($node->next);
    16             $node->next->next = $node;
    17             $node->next = null;
    18             return $head;
    19         }
    20     }
    21 
    22     #非递归版本
    23     #思想是需要保存下三个节点,分别是cnode,next(cnode->next),next2(cnode->next->next)
    24     #每次要执行的操作只有将next->next指向cnode,然后依次将这三个节点后移,直到next == null
    25     function reverse_list($head) {
    26         $cnode = $head;
    27         $next = $head->next;
    28         $head->next = null;
    29         while ($next != null) {
    30             $next2 = $next->next;
    31             $next->next = $cnode; 
    32             $cnode = $next;
    33             $next = $next2;
    34         }
    35 
    36         return $cnode;
    37     }
    38 
    39     #遍历单链表
    40     function traverse($head) {
    41         $cnode = $head;
    42         while ($cnode != null) {
    43             echo $cnode->data . " ";
    44             $cnode = $cnode->next;
    45         }
    46         echo "<br>";
    47     }
    48 
    49     $head = new Node();
    50     $n1 = new Node();
    51     $n2 = new Node();
    52     $n3 = new Node();
    53     $head->data = 0;
    54     $n1->data = 1;
    55     $n2->data = 2;
    56     $n3->data = 3;
    57     $head->next = $n1;
    58     $n1->next = $n2;
    59     $n2->next = $n3;
    60     $n3->next = null;
    61     traverse($head);
    62 
    63     $rhead = reverse_list_r($head);
    64     traverse($rhead);
    65 
    66     $rrhead = reverse_list($rhead);
    67     traverse($rrhead);
    68 ?>

    0 1 2 3 
    3 2 1 0 
    0 1 2 3

  • 相关阅读:
    SQL 在数据库中查找包含指定关键字的存储过程或函数
    根据名称查找存储过程或函数
    根据最后修改时间查找存储过程或函数
    SQL 数据过度事务模板
    Feeling something wrong
    发布一个倒计时软件(C# 开源)
    SpringBoot中的配置文件信息加密
    springboot中mysql连接配置
    React学习2_运行项目
    React学习0_文章目录
  • 原文地址:https://www.cnblogs.com/zemliu/p/2707872.html
Copyright © 2011-2022 走看看