• [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
          }
        }
      }
    }
  • 相关阅读:
    【IE】浏览器模式与文档模式 及其开发中处理方式
    【DWR】Annotation入门
    【Oracle】不安装Oracle客户端直接用PL/SQL连接数据库
    【霓虹语】マレーシア航空
    【霓虹语】古いプロジェクトの再開
    【霓虹语】日本語の勉強
    解决Flash挡住层用z-index无效的问题
    table中设置thead固定,tbody 垂直滚动条
    IE9上传文件出现“SCRIPT5: 拒绝访问”导致不能上传的解决办法
    用gulp压缩js时,ngDialog弹窗出错
  • 原文地址:https://www.cnblogs.com/taoshihan/p/9637685.html
Copyright © 2020-2023  润新知