zoukankan      html  css  js  c++  java
  • php实现反转链表(链表题一定记得画图)(指向链表节点的指针本质就是一个记录地址的变量)($p->next表示的是取p节点的next域里面的数值,next只是p的一个属性)

    php实现反转链表(链表题一定记得画图)(指向链表节点的指针本质就是一个记录地址的变量)($p->next表示的是取p节点的next域里面的数值,next只是p的一个属性

    一、总结

    链表反转两种实现方式:a、头插法(遍历一遍链表即可实现链表反转)  b、借助数组反转(遍历一遍链表将数值存在数组,反转数组,将数组里面的值尾插法插入链表,返回链表)

    链表题一定记得画图

    指向链表节点的指针本质就是一个记录地址的变量($p=链表,$p里面记录的就是一个地址),节点的next域里面记录的是下一个变量的地址

    $p->next表示的是取p节点的next域里面的数值,next只是p的一个属性

    二、php实现反转链表

    题目描述:

    输入一个链表,反转链表后,输出链表的所有元素。

    代码:

    代码一

     1 <?php
     2 /*class ListNode{
     3     var $val;
     4     var $next = NULL;
     5     function __construct($x){
     6         $this->val = $x;
     7     }
     8 }*/
     9 /*
    10 思路:
    11  
    12       pHead始终指向要反转的结点
    13         last 指向反转后的首结点
    14         每反转一个结点,把pHead结点的下一个结点指向last, last指向pHead成为反转后首结点,
    15       再把pHead向前移动一个结点直至None结束 */
    16 function ReverseList($pHead)
    17 {  
    18     if($pHead == null){ //1、这里多了一个判断
    19         return null;
    20     }
    21     $pre = null; //2、pre是一个非常普通的变量,而不是节点变量,里面记录的是节点的地址,也算是节点变量
    22     while($pHead != null){ //3、算法思路是把前面节点的地址拿到,放到下一个节点的next域中
    23         $tmp = $pHead->next;
    24         $pHead->next = $pre;
    25         $pre = $pHead;
    26         $pHead = $tmp;
    27     }
    28     return $pre;
    29      
    30 }

    代码二(也是ac)

     1 <?php
     2 /*class ListNode{
     3     var $val;
     4     var $next = NULL;
     5     function __construct($x){
     6         $this->val = $x;
     7     }
     8 }*/
     9 //算法考点:链表的头插法和尾插法,头插法即可实现链表反转
    10 //链表反转也可以借助数组反转来实现
    11 function ReverseList($pHead)
    12 {
    13     $head = null;
    14     //$end = null; //1、这两句话可有可无
    15     //$head->next=$end;
    16     while($pHead){
    17         //$p=$pHead; //2、不能这样赋值
    18         $p = new ListNode($pHead->val);
    19         $p->next=$head->next;
    20         $head->next=$p; //4、$head哪来的next域,无语了
    21         $pHead=$pHead->next;
    22     }
    23     return $head->next; //3、输出的时候发现多了一个0,所以用$head->next消除前面的那个0    5、前面多的那个0是head的0,php把它当成了一个node节点变量
    24 }

    代码三:深入理解链表后的AC

    算法思路:就是将前面节点的地址放到后面节点的next域中实现链表反转

    <?php
    /*class ListNode{
        var $val;
        var $next = NULL;
        function __construct($x){
            $this->val = $x;
        }
    }*/
    //算法考点:链表的头插法和尾插法,头插法即可实现链表反转
    //链表反转也可以借助数组反转来实现
    function ReverseList($pHead)
    {
        $pre=null;
        while($pHead){
            $tmp=$pHead->next; //
            $pHead->next=$pre; //1、将$pre变量里面记录的地址给$pHead的next$pre = $pHead; //2、将$pHead的值(一个地址)给$pre变
            $pHead=$tmp;
        }
        return $pre;
    }
  • 相关阅读:
    如何查找并启动 Reporting Services 工具
    数据压缩技术
    压缩算法
    新版压缩库发布
    如何处理海量数据
    安卓手机获得Root权限
    安卓项目的源码
    压缩算法1
    ODBC, OLEDB, ADO, ADO.Net的演化简史
    C# 文件压缩与解压(ZIP格式)
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9061163.html
Copyright © 2011-2022 走看看