题解 | #牛群的重新排列#

牛群的重新排列

https://www.nowcoder.com/practice/5183605e4ef147a5a1639ceedd447838

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @param left int整型 
     * @param right int整型 
     * @return ListNode类
     */

     //主要是要用临时变量保存开始反转的前一个节点地址和开始反转的地址
    ListNode* reverseBetween(ListNode* head, int left, int right) {
        // write code here
        //合法性检查
        if(left<=0&&(left>right)) return head ;
         ListNode *vulnode=new ListNode(0);
        vulnode->next=head;
        //合法性检查
    ListNode *prg=vulnode;
    int r=right;
    while(r--){
        prg=prg->next;
        if(!prg) return head;
    }


       //正式开始
    ListNode *ppre,*pre,*tem,*ttem;
    pre=vulnode;
    ppre=pre;

int le=left;
    while(le--){
        ppre=pre;
        pre=pre->next;
        cout<<pre->val<<endl;
        cout<<"-----"<<endl;
    }

    tem=pre;
    ListNode *cur=pre;
    int i=right-left+1;
    cout<<i;
    //开始反转
    while(i--){
        ttem=cur->next;
        cur->next=pre;
        pre=cur;
        cur=ttem;
        cout<<i;
    }
    ppre->next=pre;
    tem->next=cur;
    return vulnode->next;
    }
};

全部评论

相关推荐

点赞 评论 收藏
分享
高通滤波器v:我最近投的几个,都是要不已读不回,要不不回,还有直接拒绝的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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