欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

[PHP] 算法-删除链表中重复的结点的PHP实现

程序员文章站 2023-11-17 23:07:40
删除链表中重复的结点: 1.定义两个指针pre和current 2.两个指针同时往后移动,current指针如果与后一个结点值相同,就独自往前走直到没有相等的 3.pre指针next直接指向current指针的后一个,把相同的都跳过 pre=linkList current=linkList whi... ......
删除链表中重复的结点:
1.定义两个指针pre和current 
2.两个指针同时往后移动,current指针如果与后一个结点值相同,就独自往前走直到没有相等的
3.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
      }
    }
  }
}