实现php删除链表中重复的结点
时间:2022-07-27
本文章向大家介绍实现php删除链表中重复的结点,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
删除链表中重复的结点:
定义两个指针pre和current
两个指针同时往后移动,current指针如果与后一个结点值相同,就独自往前走直到没有相等的
pre指针next直接指向current指针的后一个,把相同的都跳过
pre=linkList
current=linkList
while current!=null
if current- data==current- next- data
value=current- data
while value==current- next- data
current=current- next
pre- next=current- next
pre=pre- next
current=current- next
return linkList
<?php
class Node{
public $data;
public $next;
public function __construct($data=""){
$this- data=$data;
}
}
//构造一个带重复的链表
$linkList=new Node();
$linkList- next=null;
$temp=$linkList;
$node1=new Node(2);
$temp- next=$node1;
$temp=$node1;
$node2=new Node(2);
$temp- next=$node2;
$temp=$node2;
$node3=new Node(3);
$temp- next=$node3;
$temp=$node3;
$node4=new Node(3);
$temp- next=$node4;
$temp=$node4;
$node5=new Node(4);
$temp- next=$node5;
$node5- next=null;
function deleteDuplication($pHead){
$pre=$pHead- next;//当前都指向第一个结点
$current=$pHead- next;//当前结点是第一个结点
while($current!=null){
//如果当前结点值和当前结点的下一个结点值相同
if($current- next!=null && $current- data==$current- next- data){
//保存当前结点值
$val=$current- data;
//当前结点往后移直到和下一个结点值不相等
while($current- next!=null && $val==$current- next- data){
$current=$current- next;
}
//前一个指针next直接指向当前结点的next
$pre- next=$current- next;
}
//两个指针同时后移
$pre=$pre- next;
$current=$current- next;
}
return $pHead;
}
var_dump($linkList);
$result=deleteDuplication($linkList);
var_dump($result);
object(Node)#1 (2) {
["data"]=
string(0) ""
["next"]=
object(Node)#2 (2) {
["data"]=
int(2)
["next"]=
object(Node)#3 (2) {
["data"]=
int(2)
["next"]=
object(Node)#4 (2) {
["data"]=
int(3)
["next"]=
object(Node)#5 (2) {
["data"]=
int(3)
["next"]=
object(Node)#6 (2) {
["data"]=
int(4)
["next"]=
NULL
}
}
}
}
}
}
object(Node)#1 (2) {
["data"]=
string(0) ""
["next"]=
object(Node)#2 (2) {
["data"]=
int(2)
["next"]=
object(Node)#4 (2) {
["data"]=
int(3)
["next"]=
object(Node)#6 (2) {
["data"]=
int(4)
["next"]=
NULL
}
}
}
}
以上就是实现php删除链表中重复的结点的全部内容和代码,感谢大家对ZaLou.Cn的支持。
- springboot 注册服务注册中心(zk)的两种方式
- 极速体验:Oracle 18c 下载和Scalable Sequence新特性
- springboot mybatis 事务管理
- Elasticsearch JAVA api轻松搞定groupBy聚合
- 微信加关注链接 一键关注公众号 解决用手机看网页无法扫二维码的烦恼
- springboot mybatis redis 二级缓存
- Elasticsearch强制重置未分配的分片(unassigned)
- 帝国cms调用缩略图和具体文章的方法
- python codis集群客户端(一) - 基于客户端daemon探活与服务列表维护
- python codis集群客户端(二) - 基于zookeeper对实例创建与摘除
- JavaScript replace() 方法
- 别让Open Sans字体拖慢wordpress后台速度
- Oracle 问题小结
- 为帝国cms模板添加站内搜索小教程
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- 基于Android在布局中动态添加view的两种方法(总结)
- Android向node.js编写的服务器发送数据并接收请求
- Android startActivityForResult和setResult的区别
- Linux系统使用Fuser命令的方法
- Android实现地理定位功能
- Android实现在ServiceManager中加入自定义服务的方法详解
- Android studio so库找不到问题解决办法
- Android使用ViewPager实现屏幕滑动效果
- Android 自定义view实现进度条加载效果实例代码
- Android电池电量监听的示例代码
- Android 解决ScrollView嵌套CridView显示问题
- Android利用zxing快速集成二维码扫描的实例教程
- Android中使用SharedPreferences完成记住账号密码的功能
- Android Intent封装的实例详解
- Android自定义Drawable实现圆角效果