zoukankan      html  css  js  c++  java
  • php链表笔记:单链表反转

    <?php
    /**
     * Created by PhpStorm.
     * User: huizhou
     * Date: 2018/12/1
     * Time: 11:41
     */
    
    /**
     * 1.链表的反转
     * Class Node
     */
    class Node
    {
        private $value;
        private $next;
    
        public function __construct($value = null)
        {
            $this->value = $value;
        }
    
        public function getValue()
        {
            return $this->value;
        }
    
        public function setValue($value)
        {
            $this->value = $value;
        }
    
         public function getNext()
        {
            return $this->next;
        }
    
        public function setNext($next)
        {
            $this->next = $next;
        }
    }
    
       // 遍历方式,将当前节点的下一个节点缓存后更改成当前节点指针
        function reverse(Node $head){
    
           if($head == null){
               return $head;
           }
    
           $pre = $head; // 取出head节点
           $cur = $head->getNext(); // 把当前节点指向下一个节点
    
           $next = null;
           while($cur != null){
               $next = $cur->getNext();
               $cur->setNext($pre); // 把当前节点的指针指向前一个节点
               $pre = $cur;
               $cur = $next;
           }
    
           // 将原链表的头节点的下一个节点设置为null,再把反转后的头节点赋给head
           $head->setNext(null);
           $head = $pre;
    
           return $head;
        }
    
        // 递归实现,在反转当前节点之前先反转后续节点
        function reverse2(Node $head){
           if($head == null || $head->getNext() == null){
               return $head;
           }
    
           $reversedHead = reverse2($head->getNext());
           $head->getNext()->setNext($head);
           $head->setNext(null);
    
           return $reversedHead;
        }
    
        function test(){
           $head = new Node(0);
           $tmp = null;
           $cur = null;
    
           // 构造一个长度为10的链表,保存头节点对象head
            for ($i = 1;$i < 10 ; $i++){
                $tmp = new Node($i);
                if ($i == 1){
                    $head->setNext($tmp);
                }else{
                    $cur->setNext($tmp);
                }
                $cur = $tmp;
            }
    
            $tmpHead = $head;
            while ($tmpHead != null){
                echo $tmpHead->getValue();
                $tmpHead = $tmpHead->getNext();
            }
    
            echo "
    ";
    
            $head = reverse2($head);
    
            while ($head != null ){
                echo $head->getValue();
                $head = $head->getNext();
            }
        }
    
        test();
  • 相关阅读:
    C&Pointer求解wc问题
    软件测试作业2
    第六周小组作业
    WordCount改进 小组项目
    WordCount
    我的“游戏”人生
    软件测试第6周小组作业
    软件测试第4周小组作业:WordCount优化
    软件测试第二周个人作业:WordCount
    MVC模式下基于SSH三大框架的java web项目excel表格的导出(不依赖另外的jar包)
  • 原文地址:https://www.cnblogs.com/mrszhou/p/10053307.html
Copyright © 2011-2022 走看看