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

链表内指定区间反转

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++题库 文章被收录于专栏

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

全部评论

相关推荐

不愿透露姓名的神秘牛友
05-28 12:15
点赞 评论 收藏
分享
能干的三文鱼刷了10...:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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