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

 更新时间:2018年09月27日 14:18:40   投稿:laozhang   我要评论
在本篇文章中,我们给大家带来了关于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删除链表中重复的结点的全部内容和代码,感谢大家对脚本之家的支持。

相关文章

  • PHP生成及获取JSON文件的方法

    PHP生成及获取JSON文件的方法

    这篇文章主要介绍了PHP生成及获取JSON文件的方法,涉及php针对json格式数据及文件相关操作技巧,需要的朋友可以参考下
    2016-08-08
  • php 采集书并合成txt格式的实现代码

    php 采集书并合成txt格式的实现代码

    记得上次有过一个叫采集后的处理这个就是它的升级版本 连采再处理,合成一本书txt的。
    2009-03-03
  • 用mysql内存表来代替php session的类

    用mysql内存表来代替php session的类

    mysql内存表实现替换php session类,效果什么大家可以自己测试下。
    2009-02-02
  • PHP使用xmllint命令处理xml与html的方法

    PHP使用xmllint命令处理xml与html的方法

    这篇文章主要介绍了PHP使用xmllint命令处理xml与html的方法,较为详细的讲述了使用xmllint工具的各种命令处理XML文件与html的方法,是非常具有实用价值的技巧,需要的朋友可以参考下
    2014-12-12
  • 轻松修复Discuz!数据库

    轻松修复Discuz!数据库

    各位站长经常会遇到的数据库损坏的错误,错误来了就去面对,不要慌张,瞎着急是没有用的。其实熟悉Discuz! 的朋友都知道,Discuz! 后台自带数据库修复工具的,如果数据库损坏导致首页打不开了,但是后台还可以进去。
    2008-05-05
  • php include和require的区别深入解析

    php include和require的区别深入解析

    本篇文章是对php中include与require的区别进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • PHP获取指定函数定义在哪个文件中以及其所在的行号实例

    PHP获取指定函数定义在哪个文件中以及其所在的行号实例

    这篇文章主要介绍了PHP获取指定函数定义在哪个文件中以及其所在的行号实例,需要的朋友可以参考下
    2014-05-05
  • PHP实现的sqlite数据库连接类

    PHP实现的sqlite数据库连接类

    这篇文章主要介绍了PHP实现的sqlite数据库连接类,涉及针对SQLite数据库的连接与增删改查等sql操作用法,非常具有实用价值,需要的朋友可以参考下
    2014-12-12
  • Thinkphp无限级分类代码

    Thinkphp无限级分类代码

    这篇文章主要介绍了Thinkphp无限级分类代码,无限级分类真的很重要了,我不会写怎么办?本篇就一步步告诉大家如何制作无限级分类,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • PHP记录搜索引擎蜘蛛访问网站足迹的方法

    PHP记录搜索引擎蜘蛛访问网站足迹的方法

    这篇文章主要介绍了PHP记录搜索引擎蜘蛛访问网站足迹的方法,实例分析了针对php记录搜索引擎蜘蛛访问足迹的技巧,涉及数据库的创建及php记录各类常见搜索引擎访问的方法,需要的朋友可以参考下
    2015-04-04

最新评论