反转链表-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,请 ...
随机推荐
- 三层架构——ATM + 购物车
三层架构:用户视图层.逻辑接口层.数据处理层. 一个功能,分成三层架构写,增加程序的可扩展性. 三层是互有联系的,从用户视图层开始写,涉及到那一层就到下一层去写,然后return 返回值,再写回来. ...
- 结合异步模型,再次总结Netty多线程编码最佳实践
更多技术分享可关注我 前言 本文重点总结Netty多线程的一些编码最佳实践和注意事项,并且顺便对Netty的线程调度模型,和异步模型做了一个汇总.原文:结合异步模型,再次总结Netty多线程编码最 ...
- 机器学习——详解KD-Tree原理
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习的第15篇文章,之前的文章当中讲了Kmeans的相关优化,还讲了大名鼎鼎的EM算法.有些小伙伴表示喜欢看这些硬核的,于是今天上 ...
- B 雷诺与奴隶主
时间限制 : 5000 MS 空间限制 : 524288 KB 问题描述 自从周文武老师在班上吹嘘了"录试"这款游戏之后,PHD同学沉迷于其中无法自拔. "录试&qu ...
- STM32F103ZET6 PWM输出
1.通用定时器的PWM功能 STM32F103ZET6有4个通用定时器,分别是TIM2.TIM3.TIM4.TIM5. 通用定时器由一个可编程预分频器驱动的16位自动装载计数器构成. 通用定时器的很多 ...
- java文件中出现最多的前n个单词
将文件打开,之后每读入一次,最后按空格进行分割.存入到map里面之后进行相应的比较输出操作.并将相应的内容输出到文件里面. package com.keshangone; //将想要输出的数据写入新的 ...
- MTK Android MCC(移动国家码)和 MNC(移动网络码)
国际移动用户识别码(IMSI) international mobile subscriber identity 国际上为唯一识别一个移动用户所分配的号码. 从技术上讲,IMSI可以彻底解决国际漫游问 ...
- 如何将本地项目上传到gitee
如何将本地项目上传到gitee不想废话,直入主题: 第一步:首先你得有一个gitee仓库(登录注册自己解决)友情提供: gitee官网地址. 首先:进入git额额官网(登录注册自己解决,没难度) 新建 ...
- Java并发之显式锁和隐式锁的区别
Java并发之显式锁和隐式锁的区别 在面试的过程中有可能会问到:在Java并发编程中,锁有两种实现:使用隐式锁和使用显示锁分别是什么?两者的区别是什么?所谓的显式锁和隐式锁的区别也就是说说Synchr ...
- 【python实现卷积神经网络】激活函数的实现(sigmoid、softmax、tanh、relu、leakyrelu、elu、selu、softplus)
代码来源:https://github.com/eriklindernoren/ML-From-Scratch 卷积神经网络中卷积层Conv2D(带stride.padding)的具体实现:https ...