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

链表内指定区间反转

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

方法

  1. 找到反转区间的首尾地址[pos_m, pos_n],并记录左边界的前一个位置pre_m,右边界的后一个位置next_n
  2. 单独反转区间,返回反转后的链表首地址pp(反转函数内部以及将反转后的链表尾部指向next_n了)
  3. 进行拼接:pre_m-<next = pp; (pp尾部的拼接在2中已经做好了)
  4. 需要注意的是当pos_m就是链表尾部的时候,直接返回pp即可,不用拼接前面(也拼接不了,此时pre_m为nullptr)
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head ListNode类 
     * @param m int整型 
     * @param n int整型 
     * @return ListNode类
     */
    ListNode* reverseList(ListNode *low, ListNode *high, ListNode *tail) {
        ListNode *pre = tail;
        ListNode * cur = low;
        while (cur != high) {
            ListNode *tmp = cur->next;
            cur->next = pre;
            pre = cur;
            cur = tmp;
        }
        return pre;
    }
    
    ListNode* reverseBetween(ListNode* head, int m, int n) {
        // write code here
        ListNode *pre_m = nullptr;
        ListNode *pos_m = head;
        ListNode *pos_n = head;
        ListNode *next_n = nullptr;
        while (pos_m && m > 1) {
            pre_m = pos_m;
            pos_m = pos_m->next;
            m--;
        }
        while (pos_n && n > 1) {
            pos_n = pos_n->next;
            n--;
        }
        next_n = pos_n->next;
        ListNode *pp = reverseList(pos_m, pos_n->next, next_n);
        if (pre_m == nullptr){
            return pp;
        }else {
            pre_m->next = pp;
        }
        return head;
    }
};
全部评论

相关推荐

秋招进行到现在终于能写总结了。完全没想到战线会拉这么长,过程会如此狼狈,不过更应该怪自己太菜了。好在所有的运气都用在了最后,也是有个去处。背景:双2本硕科班,无竞赛,本科一段研究所实习,硕士一段大厂暑期实习但无转正。技术栈是C++&nbsp;&amp;&nbsp;Golang,实习是客户端音视频(而且是鸿蒙端开发),简历两个C++项目一个Golang项目。主要投递岗位:后端,cpp软开,游戏服务端,测开,以及一些不拘泥于Java的岗位。从8月起总共投递123家公司,笔试数不清了,约面大约30家。offer/oc/意向:友塔游戏(第一个offer,面试体验很好,就是给钱好少南瑞继保(计算机科班点击就送(限男生),不...
乡土丁真真:佬很厉害,羡慕~虽然我还没有到校招的时候,也想讲一下自己的看法:我觉得不是CPP的问题,佬的背书双2,技术栈加了GO,有两段实习。投了123,面了30.拿到11个offer。这个数据已经很耀眼了。这不也是CPP带来的吗?当然也不止是CPP。至少来说在这个方向努力过的也会有好的结果和选择。同等学历和项目选java就会有更好的吗?我个人持疑问态度。当然CPP在方向选择上确实让人头大,但是我觉得能上岸,至于最后做什么方向,在我看来并不重要。至于CPP特殊,有岗位方向的随机性,java不是不挑方向,只是没得选而已。也希望自己以后校招的时候能offer满满
点赞 评论 收藏
分享
10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务