Heim > Backend-Entwicklung > PHP-Tutorial > Wie lösche ich doppelte Knoten in einer verknüpften Liste in PHP? (Codebeispiel)

Wie lösche ich doppelte Knoten in einer verknüpften Liste in PHP? (Codebeispiel)

不言
Freigeben: 2023-04-04 07:50:02
Original
1497 Leute haben es durchsucht

In diesem Artikel geht es darum, wie man doppelte Knoten in einer verknüpften Liste in PHP löscht. (Codebeispiel) hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.

Doppelte Knoten in der verknüpften Liste löschen:

  1. Zwei Zeiger vor und aktuell definieren

  2. Die beiden Zeiger bewegen sich gleichzeitig rückwärts. Wenn der aktuelle Zeiger den gleichen Wert wie der nächste Knoten hat, bewegt er sich alleine vorwärts, bis es keinen direkten Vorzeiger mehr gibt Zum einen, überspringen Sie alle gleichen

  3. 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
    Nach dem Login kopieren
    <?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);
    Nach dem Login kopieren
    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
          }
        }
      }
    }
    Nach dem Login kopieren

    Verwandte Empfehlungen:

So geben Sie den k-ten Knoten von unten aus die verknüpfte Liste in PHP (Codebeispiel)

So drucken Sie eine verknüpfte Liste vom Ende bis zum Kopf in PHP (Codebeispiel)

Das obige ist der detaillierte Inhalt vonWie lösche ich doppelte Knoten in einer verknüpften Liste in PHP? (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage