实现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
}
}
}
}


猜你喜欢
- 最近由于业务的原因,需要在Web端页面接入调试各类的网络摄像头,遇到了很多匪夷所思的问题(说的就是读得出摄像头的品牌,读不出摄像头的分辨率)
- 变量(Variable)可以看成一个小箱子,专门用来“盛装”程序中的数据。每个变量都拥有独一无二的名字,通过变量的名字就能找到变量中的数据。
- 关于 WARNING: Ignoring invalid distribution -pencv-python … 警
- 最近用python写了一个远程监控的程序,主要功能有:1.用邮件控制所以功能2.可以对屏幕截图,屏幕截图发送到邮箱3.可以用摄像头获取图片,
- Scala 循环有的时候,我们可能需要多次执行同一块代码。一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类
- 一、准备工程文件1.创建工程leeoo2.在工程根目录下创建setup.py文件3.在工程根目录下创建同名package二、编辑setup.
- demo用了点extjs的东西,主要是为了打印json数组出来。 js code(XmlUtils.js): /**/ function X
- 问题描述:某天使用idea,突然发现git提交记录没法查看具体提交的文件了。只能看到提交记录,如下图:分析可能是修改了控件设置的原因,于是尝
- 一 计算公式:二 实现代码(1)import mathfrom tqdm import tqdmimport timetotal,s,n,t
- 第一步:创建转向控制页面创建网站默认的首页文件(通常为"index.asp"或"default.asp&quo
- 线程池的理想大小取决于被提交任务的类型以及所部署系统的特性。线程池应该避免设置的过大或过小,如果线程池过大,大量的线程将在相对很少的CPU和
- MySQL Version确认(版本确认)的几个方法1.SHOW VARIABLES LIKE 'VERSION';mysq
- vue使用formData传递文件类型的数据1.需求 传递文件类型的数据和其
- Numpy支持大量的维度数组和矩阵运算,对数组运算提供了大量的数学函数库!Numpy比Python列表更具优势,其中一个优势便是速度。在对大
- Python os 模块os是“operating system”的缩写,os模块提供各种 Pyth
- 本文介绍了多个 Python IDE,并评价其优缺点。读者可以参考此文列举的 Python IDE 列表,选择适合自己的编辑器。写 Pyth
- 第一步、导入需要的包import osimport scipy.io as sioimport numpy as npimport torc
- 思路:利用time函数返回的时间字符串与指定时间字符串做比较,相等的时候执行对应的操作。不知道大家的思路是什么,感觉这样比较耗CPU。。。。
- 和大多数的语言脚本一样,学习ASP最好的方法就是亲身尝试ASP,使用你自己的系统安装PWS或者IIS。你可以边学习边在你自己的服务器上测试A
- 本文实例总结了Python常用的小技巧。分享给大家供大家参考。具体分析如下:1. 获取本地mac地址:import uuidmac = uu