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

链表内指定区间反转

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

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head ListNode类 
     * @param m int整型 
     * @param n int整型 
     * @return ListNode类
     */
    ListNode* reverseBetween(ListNode* head, int m, int n) {
        ListNode *dummy = new ListNode(0);
        dummy->next = head;
        ListNode *begin = head;
        ListNode *end = head;
        ListNode *bef = dummy;
        while (--m) {
            bef = begin;
            begin = begin->next;
        }
        ++n;
        while (--n) {
            end = end->next;
        }
        ListNode *tmp = bef;
        while (begin != end) {
            ListNode *nxt = begin->next;
            begin->next = tmp;
            tmp = begin;
            begin = nxt;
        }
        bef->next->next = end;
        bef->next = tmp;
        return dummy->next;
    }
};

思路:反转链表。

先定位几个位置:

* begin:下标m表示的链表节点。

* end:下标n + 1表示的链表节点。因为反转链表后需要把反转后的尾节点连接到原链表的后续节点上。

* dummy:虚拟头节点。因为头节点也可能被反转,反转后需要找到新的头节点。

* bef:下标m - 1表示的链表节点。因为反转链表后需要把反转后的头节点连接到原链表前面的节点上。

然后利用begin、end和bef,按照反转链表那样做即可。

全部评论

相关推荐

在改简历的大卫很认真:天天有面试 = 你已经在 offer 门口了。 海投能面成这样,说明你的简历、基础、学历都是过关的,缺的只是一次刚好匹配的缘分。 关于你说的 SQL 恐惧,我帮你捋一下: - 面试里考来考去,真就那几类: 分组、去重、关联、子查询、窗口函数(row_number、rank、sum 开窗) ​ - 面试官要的不是“写得花里胡哨”,而是思路稳、不出错。 你恐惧的本质不是不会, 是怕临场卡壳、怕写错、怕被追问。
点赞 评论 收藏
分享
03-06 18:20
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务