美文网首页剑指Offer-PHP实现
《剑指Offer》-24.反转链表

《剑指Offer》-24.反转链表

作者: 懒人成长 | 来源:发表于2018-08-11 06:47 被阅读0次

    题干

    定义一个函数,输入一个链表的图节点,反转该链表并输出反转后链表的头节点。链表节点定义如下:

    class ListNode {
        int val;
        ListNode next;
    }
    

    解题思路

    为了防止节点反转的过程中出现链表断裂的情况出现,需要使用一个指针记录节点的下一个节点

    为了完成当前节点的反转,还需要记录节点的上一个节点

    因此需要三个指针来完成一个节点的反转,对链表的所有节点进行这样的操作就完成了链表的反转

    代码实现

    <?php
    
    class ListNode
    {
        private $val;
        private $next;
    
        public function __set($name, $value)
        {
            $this->$name = $value;
        }
    
        public function __get($name)
        {
            return $this->$name;
        }
    }
    
    $node1 = new ListNode();
    $node1->val = 1;
    $node2 = new ListNode();
    $node2->val = 2;
    $node1->next = $node2;
    $node3 = new ListNode();
    $node3->val = 3;
    $node2->next = $node3;
    $node4 = new ListNode();
    $node4->val = 4;
    $node3->next = $node4;
    $node5 = new ListNode();
    $node5->val = 5;
    $node4->next = $node5;
    
    
    function reverseList($head)
    {
        $prev = null;
        $node = $head;
        $reverseHead = null;
        while (!empty($node)) {
            $next = $node->next;
            if (empty($next)) {
                $reverseHead = $node;
            }
    
            $node->next = $prev;
            $prev = $node;
            $node = $next;
        }
    
        return $reverseHead;
    }
    
    var_dump(reverseList(null));
    var_dump(reverseList($node1));
    var_dump(reverseList($node5));
    

    相关文章

      网友评论

        本文标题:《剑指Offer》-24.反转链表

        本文链接:https://www.haomeiwen.com/subject/osurbftx.html