• 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

  • 相关阅读:
    Remote Procedure Call (RPC) Locator与X3
    Delphi的悬浮窗口
    改变CSS样式
    JavaScript 打印Web页面指定区域的信息
    判断页面元素存在与否
    如何处理HTML标签属性
    jQuery 获取和设置表单元素
    如何添加/移除CSS类
    处理网页内容
    正则表达式 收集
  • 原文地址:https://www.cnblogs.com/zemliu/p/2707872.html
Copyright © 2020-2023  润新知