反转链表-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,请 ...
随机推荐
- Input标签中属性的注意点
readonly 只读字段,即用户不可更改,但可以通过tab切换到该字段,还可以选中复制该字段 step 输入合法的数字间隔,当step属性的值为负数或0时默认为1,可以配合max,min属性来创建合 ...
- iOS 引用计数
一.简介 OC 在创建对象时,不会直接返回该对象,而是返回一个指向对象的指针. OC 在内存管理上采用了引用计数,它是一个简单而有效管理对象生命周期的方式.在对象内部保存一个用来表示被引用次数的数字, ...
- 谈谈flex布局实现水平垂直居中
我们在这要谈的是用flex布局来实现水平和垂直居中.随着移动互联网的发展,对于网页布局来说要求越来越高,而传统的布局方案对于实现特殊布局非常不方便,比如垂直居中.所以09年,W3C 提出了一种新的方案 ...
- Selenium Grid 的使用
简介 Selenium Grid 是 selenium 的三大组件之一,允许用户同时在不同的机器和系统上测试不同的浏览器,可以分布式的来执行我们的自动化测试,也可以测试不同浏览器的兼容性. Selen ...
- GO gRPC教程-环境安装(一)
前言 gRPC 是一个高性能.开源和通用的 RPC 框架,面向移动和 HTTP/2 设计,带来诸如双向流.流控.头部压缩.单 TCP 连接上的多复用请求等特.这些特性使得其在移动设备上表现更好,更省电 ...
- JS去除字符串内的空白字符方法
有时我们需要对用户的输入进行一些处理,比如用户输入的密码或者用户名我们就需要去除前后空格,下面写一个去除空白字符的方法 function trim(string = '') { return stri ...
- 浅谈头文件(.h)和源文件(.cpp)的区别
浅谈头文件(.h)和源文件(.cpp)的区别 本人原来在大一写C的时候,都是所有代码写在一个文件里一锅乱煮.经过自己开始写程序之后,发现一个工程只有一定是由多个不同功能.分门别类展开的文件构成的.一锅 ...
- 微信小程序animation有趣的自定义动画
这几天在看代码时遇到了一些问题:关于微信小程序的animation自定义动画自己没有系统的学习过 做动画需要我们将一个复杂的动作过程,拆解为一步一步的小节过程 微信中已经为我们写好了端口我们只需要实例 ...
- docker 服务器安装harbor
一.Harbor是什么? 二.环境搭建 2.1在linux centos搭建服务 2.2docker安装 yum安装 yum install docker 卸载 :pip uninstall dock ...
- 【python】利用jieba中文分词进行词频统计
以下代码对鲁迅的<祝福>进行了词频统计: import io import jieba txt = io.open("zhufu.txt", "r" ...