zoukankan      html  css  js  c++  java
  • [PHP] 算法-删除链表中重复的结点的PHP实现

    删除链表中重复的结点:
    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
          }
        }
      }
    }
  • 相关阅读:
    Leetcode 191.位1的个数 By Python
    反向传播的推导
    Leetcode 268.缺失数字 By Python
    Leetcode 326.3的幂 By Python
    Leetcode 28.实现strStr() By Python
    Leetcode 7.反转整数 By Python
    Leetcode 125.验证回文串 By Python
    Leetcode 1.两数之和 By Python
    Hdoj 1008.Elevator 题解
    TZOJ 车辆拥挤相互往里走
  • 原文地址:https://www.cnblogs.com/taoshihan/p/9637685.html
Copyright © 2011-2022 走看看