反转链表-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,请 ...
随机推荐
- RPC框架实现(一) Protobuf的rpc实现
概述 RPC框架是云端服务基础框架之一,负责云端服务模块之间的项目调用,类似于本地的函数调用一样方便.常见的RPC框架配带的功能有: 编解码协议.比如protobuf.thrift等等. 服务发现.指 ...
- 数据分析_numpy_基础2
数据分析_numpy_基础2 sqrt 开方 arr = np.arange(10) arr # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) np.sqrt(arr) ...
- 深入理解Java虚拟机(第三版)-13.Java内存模型与线程
13.Java内存模型与线程 1.Java内存模型 Java 内存模型的主要目的是定义程序中各种变量的访问规则,即关注在虚拟机中把变量值存储到主内存和从内存中取出变量值的底层细节 该变量指的是 实例字 ...
- NKOJ4270 小奇挖矿2
问题描述 [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿石交易市场,以便为飞船升级无限非概率引擎. [问题描述] 现在有m+1个星球,从左到右标号为0到m,小 ...
- rem布局和使用js rem动态改变字体大小,自适应
解决rem文字动态改变字体大小: <script> console.log(window.devicePixelRatio); var iScale = 1; iScale = iScal ...
- Java中toString()与new String()
Java中toString()与new String(): 1.错误演示: FileInputStream fileIn = new FileInputStream(filePath);byte[] ...
- MyBatis(九):动态SQL
本文是按照狂神说的教学视频学习的笔记,强力推荐,教学深入浅出一遍就懂!b站搜索狂神说或点击下面链接 https://space.bilibili.com/95256449?spm_id_from=33 ...
- sqlchemy查询的其他操作
sqlalchemy的数据查询排序 1 .正序排序:session.query(model).order_by(model.attr).all() session.query(model).order ...
- 中阶d01-- web前端 html css js bootstrap
html 页面骨架结构css 页面优化js(脚本语言) 页面和用户互动 bootstrap 前端框架,主要实现不同设备直接打开页面时播放比例设置(全屏暂时,不要滚动条)
- <E> 泛型
/* * 使用集合存储自定义对象并遍历 * 由于集合可以存储任意类型的对象,当我们存储了不同类型的对象,就有可能在转换的时候出现类型转换异常, * 所以java为了解决这个问题,给我们提供了一种机制, ...