题解 | #链表内指定区间反转#

链表内指定区间反转

https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c

<?php

/*class ListNode{
    var $val;
    var $next = NULL;
    function __construct($x){
        $this->val = $x;
    }
}*/

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @param m int整型 
 * @param n int整型 
 * @return ListNode类
 */
function reverseBetween( $head ,  $m ,  $n )
{
    // write code here
    if($head == null || $head->next == null){
        return $head;
    }
    $beg = $head;
    $pre = null;
    $pos = 1;
    while($pos < $m){
        $pre = $beg;
        $beg = $beg->next;
        $pos++;
    }
    $reverseBeg = $beg;
    $temp= $beg;
    while($pos <= $n){
        $temp = $beg->next;
        $beg->next = $pre;
        $pre = $beg;
        $beg = $temp;
        $pos ++;
    }
    $temp = $reverseBeg->next;
    $reverseBeg->next = $beg;
    if($temp != null){
        $temp->next = $pre;
        return $head;
    }else{
        return $pre;
    }
    
}

思路:

  1. 新增beg和pre指针,while循环使beg指向第m个节点,pre指向beg前一个指针
  2. 用reverseStart指针记录第m节点,beg和pre用while循环至第n个节点,用普通反转链表法反转m到n的链表
  3. 反转结束后,beg指向第n+1个节点,pre指向第n个节点。第m个节点指向beg节点,第n个节点需要判断第一个节点是否为null,不为null指向m-1个节点,返回head(最初指向第一个节点的指针),为null直接返回第m个节点。
#刷题记录#
全部评论

相关推荐

04-08 13:31
已编辑
门头沟学院 前端工程师
D0cC:京东营收1万多亿人民币,阿里9000多亿,虽然他俩利润都没腾讯和字节多,但是很恐怖了啊,负担了多少打工人的薪水
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
群星之怒:不是哥们,你就不好奇瘫痪三十年的老植物人是啥样的吗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务