实现php删除链表中重复的结点


Posted in PHP onSeptember 27, 2018

删除链表中重复的结点:

定义两个指针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删除链表中重复的结点的全部内容和代码,感谢大家对三水点靠木的支持。

PHP 相关文章推荐
php的控制语句
Oct 09 PHP
繁体中文转换为简体中文的PHP函数
Oct 09 PHP
PHP中for循环语句的几种变型
Mar 16 PHP
dedecms系统常用术语汇总
Apr 03 PHP
php is_file()和is_dir()用于遍历目录时用法注意事项
Mar 02 PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
Oct 03 PHP
ThinkPHP关联模型操作实例分析
Sep 23 PHP
PHP以指定字段为索引返回数据库所取的数据数组
Jun 30 PHP
PHP图片上传代码
Nov 04 PHP
在PHP程序中使用Rust扩展的方法
Jul 03 PHP
php版微信小店API二次开发及使用示例
Nov 12 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
Aug 30 PHP
浅析php如何实现爬取数据原理
Sep 27 #PHP
Laravel源码解析之路由的使用和示例详解
Sep 27 #PHP
php实现有序数组旋转后寻找最小值方法
Sep 27 #PHP
PHP实现SMTP邮件的发送实例
Sep 27 #PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
Sep 26 #PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
Sep 26 #PHP
多个Laravel项目如何共用migrations详解
Sep 25 #PHP
You might like
Win9x/ME下Apache+PHP安装配置
2006/10/09 PHP
php开发过程中关于继承的使用方法分享
2011/06/17 PHP
php自动给文章加关键词链接的函数代码
2012/11/29 PHP
zf框架的校验器使用使用示例(自定义校验器和校验器链)
2014/03/13 PHP
让您的菜单不离网站
2006/10/03 Javascript
javascript eval函数深入认识
2009/02/21 Javascript
实现连缀调用的map方法(prototype)
2009/08/05 Javascript
js 剪切板的用法(clipboardData.setData)与js match函数介绍
2013/11/19 Javascript
js 去掉空格实例 Trim() LTrim() RTrim()
2014/01/07 Javascript
javascript实现的多个层切换效果通用函数实例
2015/07/06 Javascript
js实现Select列表内容自动滚动效果代码
2015/08/20 Javascript
jQuery仅用3行代码实现的显示与隐藏功能完整实例
2015/10/08 Javascript
关于input全选反选恶心的异常情况
2016/07/24 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
详细介绍RxJS在Angular中的应用
2017/09/23 Javascript
原生js封装运动框架的示例讲解
2017/10/01 Javascript
AngularJS 应用模块化的使用
2018/04/04 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
2018/09/25 Javascript
图解javascript作用域链
2019/05/27 Javascript
[03:11]TI9战队档案 - Alliance
2019/08/20 DOTA
Python实例一个类背后发生了什么
2016/02/09 Python
Python实现求数列和的方法示例
2018/01/12 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
python 同时运行多个程序的实例
2019/01/07 Python
如何使用python把ppt转换成pdf
2019/06/29 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
2020/03/30 Python
使用CSS3的box-sizing属性解决div宽高被内边距撑开的问题
2016/06/28 HTML / CSS
戴尔美国官网:Dell
2016/08/31 全球购物
教师自我鉴定范文
2014/03/20 职场文书
书香校园建设方案
2014/05/02 职场文书
综合素质评价个性发展自我评价
2015/03/06 职场文书
教师学习十八届五中全会精神心得体会
2016/01/05 职场文书
MySQL之高可用集群部署及故障切换实现
2021/04/22 MySQL
如何理解Vue简单状态管理之store模式
2021/05/15 Vue.js
Win11怎么修改电源模式?Win11修改电源模式的方法
2022/04/05 数码科技
tomcat默认最大连接数及相关调整方法
2022/05/06 Servers