php 實現鏈表逆序

來源:互聯網
上載者:User

這篇文章介紹的內容是關於php 實現鏈表逆序 ,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

<?php    class Node {        public $str;        public $next;        function __construct ($str) {            $this->str = $str;        }    }    //建立鏈表頭    function createList () {        $head = new Node(null);        return $head;    }    //向鏈表$head中插入節點並賦值    function insertNode ($str, &$head) {        $node = new Node($str);        $node->next = &$head->next;        $head->next = &$node;    }    //取出鏈表的第一個節點,相當於出隊    function outQueue (&$head) {        $tmp = $head->next;        $head->next = $head->next->next;        $tmp->next = null;        return $tmp;    }    //將鏈表$head進行逆序    function reverse (&$head) {        $reversed = createList(null);        while (null != $head->next) {            insertNode(outQueue($head), $reversed);        }        return $reversed;    }    $head = createList();    insertNode('hello', $head);    insertNode('world', $head);    insertNode('99999999999999', $head);    insertNode('888888888888888', $head);    insertNode('7777777777777', $head);    insertNode('66666666666666', $head);    insertNode('55555555555', $head);    insertNode('444444444444', $head);    insertNode('333333333333', $head);    insertNode('222222222222222', $head);    insertNode('111111111111', $head);    insertNode('000000000000000', $head);    print_r($head);    $reversed = reverse($head);    echo "<hr />";    print_r($reversed);    //上面的方法沒有在原鏈表上操作,不過他建立了一個新鏈表,    //雖然邏輯實現顯得簡單,但是太不專業    //下面貼出更加專業的逆序代碼    function reverse2 (&$head) {    $q = $head->next->next;    $head->next->next = null;    while (null != $q) {        $p = $q;        $q = $p->next;        $p->next = $head->next;        $head->next = $p;    }    reverse2($head);    echo "<hr />";    print_r($head);} ?>


輸出結果:
逆序前的鏈表:
Node Object ( [str] => [next] => Node Object ( [str] => 000000000000000 [next] => Node Object ( [str] => 111111111111 [next] => Node Object ( [str] => 222222222222222 [next] => Node Object ( [str] => 333333333333 [next] => Node Object ( [str] => 444444444444 [next] => Node Object ( [str] => 55555555555 [next] => Node Object ( [str] => 66666666666666 [next] => Node Object ( [str] => 7777777777777 [next] => Node Object ( [str] => 888888888888888 [next] => Node Object ( [str] => 99999999999999 [next] => Node Object ( [str] => world [next] => Node Object ( [str] => hello [next] => ) ) ) ) ) ) ) ) ) ) ) ) )

逆序後的鏈表:
Node Object ( [str] => [next] => Node Object ( [str] => Node Object ( [str] => hello [next] => ) [next] => Node Object ( [str] => Node Object ( [str] => world [next] => ) [next] => Node Object ( [str] => Node Object ( [str] => 99999999999999 [next] => ) [next] => Node Object ( [str] => Node Object ( [str] => 888888888888888 [next] => ) [next] => Node Object ( [str] => Node Object ( [str] => 7777777777777 [next] => ) [next] => Node Object ( [str] => Node Object ( [str] => 66666666666666 [next] => ) [next] => Node Object ( [str] => Node Object ( [str] => 55555555555 [next] => ) [next] => Node Object ( [str] => Node Object ( [str] => 444444444444 [next] => ) [next] => Node Object ( [str] => Node Object ( [str] => 333333333333 [next] => ) [next] => Node Object ( [str] => Node Object ( [str] => 222222222222222 [next] => ) [next] => Node Object ( [str] => Node Object ( [str] => 111111111111 [next] => ) [next] => Node Object ( [str] => Node Object ( [str] => 000000000000000 [next] => ) [next] => ) ) ) ) ) ) ) ) ) ) ) ) )

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.