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

yipeiwu_com6年前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删除链表中重复的结点的全部内容和代码,感谢大家对【宜配屋www.yipeiwu.com】的支持。

相关文章

隐性调用php程序的方法

本文实例讲述了隐性调用php程序的方法。分享给大家供大家参考。具体如下: 复制代码 代码如下:<mce:script language = "javascript" src = "...

在smarty中调用php内置函数的方法

相信有很多朋友还不知道,可以在smarty模板里调用php的内置函数,我们一起来看看它的用法。 模板书写: {'param1'|functionName:'param2':'param3...

php fsockopen伪造post与get方法的详解

fsockopen 伪造 post和get方法哦,如果你正在找 伪造 post和get方法的php处理代码这款不错哦。复制代码 代码如下:<?php//fsocket模拟post提...

php session安全问题分析

因此,我们主要解决的思路是效验session ID的有效性. 以下为引用的内容: 复制代码 代码如下: <?php if(!isset($_SESSION['user_agent'...

PHP 出现乱码和Sessions验证问题的解决方法!

在PHP脚本中读出中文或者其他语言文字为乱码的时候,首先检查你的文件格式是不是用UTF8的编码格式保存的。如果不是请用UltraEdit...等一些对UTF8支持转换的工具转换一下,最好...