反转链表-PHP的实现
<?
//节点
class Node
{
private $Data;//节点数据 private $Next;//下一节点 public function setData($value)
{
$this->Data=$value;
} public function setNext($value)
{
$this->Next = $value;
} public function getData()
{
return $this->Data;
} public function getNext()
{
return $this->Next;
} public function __construct($data, $next)
{
$this->setData($data);
$this->setNext($next);
} } //链表数据
class LinkList
{
private $header;//头节点 private $size;//长度 public function getSize()
{
$i = 0;
$node = $this->header;
while ($node->getNext() != null) {
$i++;
$node = $node->getNext();
} return $i;
} public function setHeader($value)
{
$this->header = $value;
} public function getHeader()
{
return $this->header;
} public function __construct()
{
header("content-type:text/html; charset=utf-8");
$this->setHeader(new Node(null,null));
} /**
*@author Marx
*@param $data--要添加节点的数据
*
*/
public function add($data)
{
$node = $this->header; //var_dump($this->header); while($node->getNext() != null) {
$node = $node->getNext();
} $node->setNext(new Node($data,null));
} /**
*@author Marx
*@param $data--要移除节点的数据
*
*/
public function removeAt($data)
{
$node = $this->header; if ($node->getNext() == null) {
return;
} while ($node->getData() != $data)
{
$node = $node->getNext();
} $node->setData($node->getNext()->getData()); $node->setNext($node->getNext()->getNext());
} /**
*@author Marx
*@param 遍历
*
*/
public function get()
{
$node = $this->header;
if ($node->getNext() == null) {
print("数据集为空!");
return;
} while ($node->getNext() != null) {
print('['.$node->getNext()->getData().'] -> \m');
if ($node->getNext()->getNext() == null){break;}
$node = $node->getNext();
}
} /**
*@author Marx
*@param $data--要访问的节点的数据
* @param 此方法只是演示不具有实际意义
*
*/ public function getAt($data)
{
$node = $this->header->getNext(); if ($node->getNext() == null) {
print("数据集为空!\n");
return;
} while ($node->getData() != $data) {
if ($node->getNext() == null) {break;} $node = $node->getNext();
} return $node->getData();
} /**
*@author Marx
*@param $value--需要更新的节点的原数据 --$initial---更新后的数据
*
*/
public function update($initial,$value)
{
$node = $this->header->getNext(); if($node->getNext() == null) {
print("数据集为空!\n"); return;
} while ($node->getData() != $initial) {
//var_dump($node->getData());
//var_dump($initial);
echo "\n"; if ($node->getNext() == null) {break;} $node = $node->getNext();
}
//var_dump($node->getData());
//var_dump($value); $node->setData($value); }
} //迭代反转
function ReverseList1(Node $pHeader)
{
$q = $pHeader->getNext();//首节点没值 只能获取下一个节点 称为【当前节点】 $p = null;//负责设置【当前】的下一个 next值 while($q)//【当前】
{
$r = $q->getNext();//负责拿下一个 $q->setNext($p);//负责设置【当前】 $p = $q;//将【更改后的当前】的存下来 $q = $r;//将一下节点赋给【当前】节点
} $newNode = new Node(null, $p); return $newNode;
} $lists = new LinkList();//创建链表数据 $lists->add(1);//增加节点数据 顺序按push来 $lists->add(2); $lists->add(3); $haedNode = $lists->getHeader();//获取全量节点 var_dump($haedNode);//当前节点数据 $haedNode2 = ReverseList1($haedNode);
var_dump($haedNode2);//反转节点数据
反转链表流程图

反转链表-PHP的实现的更多相关文章
- 剑指Offer面试题:15.反转链表
一.题目:反转链表 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点. 链表结点定义如下,这里使用的是C#描述: public class Node { public in ...
- 剑指offer六:反转链表
输入一个链表,反转链表后,输出链表的所有元素 public class ListNode { int val; ListNode next = null; ListNode(int val) { th ...
- 剑指Offer 反转链表
题目描述 输入一个链表,反转链表后,输出链表的所有元素. 思路: 法1:用栈,压栈出栈 法2:头插法(有递归非递归2中) AC代码: /* struct ListNode { int va ...
- PAT乙级 1025. 反转链表 (25)
1025. 反转链表 (25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一个常数K以及一个单链表L,请 ...
- 剑指Offer:面试题16——反转链表(java实现)
问题描述 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的链表的头结点.链表结点如下: public class ListNode { int val; ListNode next = n ...
- (剑指Offer)面试题16:反转链表
题目: 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点. 链表的定义如下: struct ListNode{ int val; ListNode* next; }; 思路: 反 ...
- 【剑指offer】递归循环两种方式反转链表
转载请注明出处:http://blog.csdn.net/ns_code/article/details/25737023 本文分别用非递归和递归两种方式实现了链表的反转,在九度OJ上AC. 题目描写 ...
- 【剑指offer 面试题16】反转链表
思路: 用三个指针preNode.curNode.nextNode完成. #include <iostream> using namespace std; struct ListNode ...
- 剑指OFFER之反转链表(九度OJ1518)
题目描述: 输入一个链表,反转链表后,输出链表的所有元素.(hint : 请务必使用链表) 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行为一个整数n(0<= ...
- PAT-乙级-1025. 反转链表 (25)
1025. 反转链表 (25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一个常数K以及一个单链表L,请 ...
随机推荐
- 【Pytest01】全网最全最新的Pytest框架快速入门
一.Pytest简介pytest是一个非常成熟的全功能的Python测试框架,主要有一下几个特点:1.简单灵活,容易上手,支持参数化2.能够支持简单的单元测试和复杂的功能测试,还可以用来做seleni ...
- coding++:SpringBoot 处理前台字符串日期自动转换成后台date类型的三种办法
第(1)种: 使用@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)注解在实体字段上. 这种方式的优点是:可以灵活的定义接收的类型 缺点很明显:不能全局统 ...
- SpringBoot学习笔记(十一:使用MongoDB存储文件 )
@ 目录 一.MongoDB存储文件 1.MongoDB存储小文件 2.MongoDB存储大文件 2.1.GridFS存储原理 2.2.GridFS使用 2.2.1.使用shell命令 2.2.2.使 ...
- c++ 常量/有符号数和无符号数
一.宏定义 #define 和常量 const 1. const关键字 const是constant的简写,只要一个变量前面用const来修饰,就意味着该变量里的数据可以被访问,不能被修改.也就是说c ...
- 原生js判断手机端页面滚动停止
var topValue = 0,// 上次滚动条到顶部的距离 interval = null;// 定时器 contactsList = document.getElementById(" ...
- CAP定理和BASE理论
CAP定理和BASE理论 标签(空格分隔): 操作系统 CAP定理 CAP定理: 一个分布式系统最多只能满足一致性 (Consistency), 可用性(Availability)和分区容错性(Par ...
- 手工注入——sql server (mssql)注入实战和分析
前言 首先要对sql server进行初步的了解.常用的全部变量@@version:返回当前的Sql server安装的版本.处理器体系结构.生成日期和操作系统.@@servername:放回运行Sq ...
- ARM.SchDoc图解
1.基准电压.CR1220电池 2.LCD 3.SPI 4.外部SAM 5.实时时钟 6.EEPROM 7.JTAG 8.复位
- ElementUI el-input标签 绑定keyup事件v-on:keyup.enter="convert"无效解决方案
期望实现,输入数字后,回车直接执行点击按钮"转换" 无效写法: <el-input v-model="input" placeholder="请 ...
- PHP常用设计模式,PHP常用设计模式详解,PHP详解设计模式,PHP设计模式
PHP常用设计模式详解 单例模式: php交流群:159789818 特性:单例类只能有一个实例 类内__construct构造函数私有化,防止new实例 类内__clone私有化,防止复制对象 设置 ...