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

链表内指定区间反转

http://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 if(n==m) return head;

    ListNode *pStart=head;//起始之前的节点
    ListNode *pEnd;
    
    if(m==1){
        ListNode *p=head;
        ListNode *pNext=p->next;
        for(int i=1;i<n;i++){
            ListNode *pLast=p;
            p=pNext;
            pNext=pNext->next;
            p->next=pLast;
        }
        pStart->next=pNext;
        return p;
    }
    else{

        for(int i=1;i<m;i++){
            if(i==1)
                pStart=pStart;
            else
                pStart=pStart->next;
        }
        ListNode *p=pStart->next;
        ListNode *pNext=p->next;
        for(int i=1;i<=n-m;i++){
            ListNode *pLast=p;
            p=pNext;
            pNext=pNext->next;
            p->next=pLast;
        }
        pStart->next->next=pNext;
        pStart->next=p;
        return head;
    }
    
    
    
}

};

特判起始位置为1,剩余的稍微修改一下整体反转的代码即可

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务