网络编程
位置:首页>> 网络编程>> php编程>> 实现php删除链表中重复的结点

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

作者:laozhang  发布时间:2023-09-05 09:36:15 

标签: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
  }
 }
}
}
0
投稿

猜你喜欢

  • 在http规则中用404来表示某个页面不能访问,一般来说,网站的404错误页面都是IIS或APACHE默认的页面,千篇一律,非常单调。由于可
  • 我的世界小游戏使用方法:移动前进:W,后退:S,向左:A,向右:D,环顾四周:鼠标,跳起:空格键,切换飞行模式:Tab;选择建筑材料砖:1,
  • 【基本介绍】【格式】:pivot(聚合函数 for 需要转为列的字段名 in(需要转为列的字段值))【说明】:实现将指定字段的字段值转换为列
  •  让 PHP 支持 MySQLPHP 有专有的 MySQL 函数库以使用操作 MYSQL 数据库。在 PHP 5 及以后版本中不再
  • 上次谈到客户端和服务端的编码“陷阱”,其中对url编码只是提及带过,并没有做深入讨论,事实上由于浏览器环境的复杂和不一致性,我们也很容易掉进
  • 下载了一个小型的记帐软件,发现这个软件数据库用的是access,很想看看它的数据库结构怎样,结果人家加密了。access的解密小case了,
  • 一个网站能切换不同的CSS风格大家应该都了解,像众所周知的腾讯在今年改版时也增加了切换皮肤的功能。根据时间自动调整站点风格是不错的想法,这种
  • rss的优点 1.您可以有选择地浏览您感兴趣的以及与您的工作相关的新闻。 2.您可以把需要的信息从不需要的信息(兜售信息,垃圾邮件等)中分离
  • pytorch默认使用单精度float32训练模型,原因在于:使用float16训练模型,模型效果会有损失,而使用double(float6
  • QQ影音新版发布官网Banner经过两周的酝酿、脑爆与设计调整,于20日顺利上线,连续7天,经历了昨天激动人心的最后发布,到此告一段落,这里
  • 本文实例讲述了php防止sql注入中过滤分页参数的方法。分享给大家供大家参考。具体分析如下:就网络安全而言,在网络上不要相信任何输入信息,对
  • 问:把数据从MySQL迁移到Oracle需要注意些什么?答:以下是MySQL迁到Oracle需要掌握的注意事项,希望对你有所帮助。1.自动增
  • 如果你正在运行使用MySQL的Web应用程序,那么你把密码或者其他敏感信息保存在应用程序里的机会就很大。保护这些数据免受黑客或者窥探者的获取
  • 今天小池提出一个问题讨论,如何使分页做的更友好。做了一些调研和思考,做了些总结。分页在电商网站3级页、搜索结果页面等信息量大的页面是很重要的
  • IE>6 及其它浏览器不在此文论述范围内。img 的 onload 事件,是当图片加载完成之后,就处触发。img.complete 这
  • 本文例举了ASP实例关于ASP与ACCESS链接的两种方式。<%dim dd,connstrdd="data.mdb&quo
  • 在ASP输出页面只是调出数据库里内容展现给用户看没有使用SESSION等动态属性,是可以CACHE的,以加快访问速度具体操作方法如下:在as
  • 今天我们整理了ip地址和身份证的javascript验证方法。虽然ip地址和身份证的验证不是很经常会遇到,但是大家也可以研究一下js代码,里
  • 从MySQL 5.0.2开始,通过mysql_stmt_attr_set() C API函数实现了服务器端光标。服务器端光标允许在服务器端生
  • 当我们的文章表中没有对于文章的评论数字段时,我们该这么写sql语句来显示出评论最多的文章呢?下面本站给大家收集了几种方法,仅供参考:1.se
手机版 网络编程 asp之家 www.aspxhome.com