Leetcode-旋转链表Ⅱ(中等)

题目描述

给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。

图片说明
参考:https://leetcode-cn.com/problems/reverse-linked-list-ii/solution/java-shuang-zhi-zhen-tou-cha-fa-by-mu-yi-cheng-zho/

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* reverseBetween(ListNode* head, int left, int right) {
        ListNode* fixpre=new ListNode(0);
        fixpre->next=head;
        ListNode* guard=fixpre,*p=guard->next;//guard是要转的位置的前一个节点,p是要旋转的第一个节点
        int n=left-1;
        while(n--){//循环left-1次,找到开始旋转的位置
            guard=guard->next;
            p=guard->next;
        }
        n=right-left;
        while(n--){//循环right-left次,完成后面right-left个节点通过头插法放在guard后面
            ListNode* temp=p->next;
            p->next=temp->next;

            temp->next=guard->next;
            guard->next=temp;
        }
        return fixpre->next;//不能返回head
    }
};

```

全部评论

相关推荐

03-03 23:12
已编辑
北京邮电大学 Java
书海为家:我来给一点点小建议,因为毕竟还在学校不像工作几年的老鸟有丰富的项目经验,面试官在面试在校生的时候更关注咱们同学的做事逻辑和思路,所以最好在简历中描述下自己做过项目的完整过程,比如需求怎么来的,你对需求的解读,你想到的解决办法,遇到困难如何找人求助,最终项目做成了什么程度,你从中收获了哪些技能,你有什么感悟。
你的简历改到第几版了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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