反转链表-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,请 ...
随机推荐
- openssl生成rsa公私钥对并在java中使用
rsa著名的非对称加密算法,具体实现我也不是很清楚,大概先要了解一下密码学,有一定基础才能去看的东东,这里就先介绍怎么使用rsa为我们服务. 首先openssl这是个集成了众多加密算法的工具,它将这一 ...
- LeetCode46 回溯算法求全排列,这次是真全排列
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode的26篇文章,我们来实战一下全排列问题. 在之前的文章当中,我们讲过八皇后.回溯法,也提到了全排列,但是毕竟没有真正写 ...
- 《Flutter 动画系列》组合动画
老孟导读:在前面的文章中介绍了 <Flutter 动画系列>25种动画组件超全总结 http://laomengit.com/flutter/module/animated_1/ < ...
- MATLAB 文件读取(3)
1.gps ,数值格式的读取 clear all test=importdata('2017- 9-27- 8-26-51.txt'); [r,c]=size(test.data);%row行,col ...
- java程序:转化金额
在处理财务账款时,需要将转账金额写成大写的.也就是说,如果要转账123456.00元,则需要写成“壹拾贰万叁仟肆佰伍拾陆元整”.所以常常需要通过程序控制自动进行转换.本实例实现了小写金额到大写金额的转 ...
- Python第三方包之PrettyTable
Python第三方包之PrettyTable 可以让我们将数据用表格的方式展示出来 安装方式 pip install PrettyTable 测试是否安装成功 使用方法与对比 增加一条数据 先简单的看 ...
- D - D 分糖果HDU - 1059(完全背包+二进制优化)
有两个小朋友想要平分一大堆糖果,但他们不知道如何平分需要你的帮助,由于没有spj我们只需回答能否平分即可. 糖果大小有6种分别是1.2.3.4.5.6,每种若干颗,现在需要知道能不能将这些糖果分成等额 ...
- what the fuck!(二分查找 / 暴力模拟)
what the fuck! Description 现在有一家公司有nnn个员工(nnn为奇数),他们的工资发放是基本工资+提成,现在这家公司计划再招一批人.要写一篇招聘启事,但是对于这个招聘启事中 ...
- P1044 栈(递归、递推、卡特兰、打表)
P1044 栈 题目背景 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈). 栈的重要 ...
- 页面静态化--Thymeleaf
1.Thymeleaf简介 官方网站:https://www.thymeleaf.org/index.html Thymeleaf是用来开发Web和独立环境项目的现代服务器端Java模板引擎. Thy ...