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

链表内指定区间反转

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) {
        // write code here
        ListNode *ans = new ListNode(-1);
        ans->next = head;
        ListNode *leftNode = ans;
        // 定位到第m-1位;
        for(int i=0;i<m-1;++i)
        {
            leftNode = leftNode->next;
        }

        ListNode *rightNode = leftNode;
        // 定位到n+1,
        for(int i=m;i<n+1;++i)
        {
            rightNode = rightNode->next;
        }

        // 截取出一个子链表
        ListNode *temp = leftNode->next;
        ListNode *rightNode_next = rightNode->next;

        // 切断链接
        leftNode->next = NULL;
        rightNode->next = NULL;

        // 反转局部链表
        ListNode *temp_pre = NULL;
        ListNode *temp_cur = temp;
        while(temp_cur)
        {
            ListNode *temp_cur_next = temp_cur->next;
            temp_cur->next = temp_pre;
            temp_pre = temp_cur;
            temp_cur = temp_cur_next;
        }

        // 接回原来的链表
        leftNode->next = rightNode;
        temp->next = rightNode_next;

        return ans->next;
    }
};

#算法#
C++题库 文章被收录于专栏

非淡泊无以明志,非宁静无以致远

全部评论

相关推荐

10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
totoroyyw:千年老妖😂
投递华为等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务