侧边栏壁纸
博主头像
Hope博主等级

努力赚钱的工科研究生

  • 累计撰写 362 篇文章
  • 累计创建 129 个标签
  • 累计收到 5 条评论
标签搜索

LeetCode 92. 反转链表||

Hope
2022-02-13 / 0 评论 / 0 点赞 / 381 阅读 / 843 字
温馨提示:
本文最后更新于 2022-02-13,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

LeetCode 92. 反转链表||

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

image.png

思路:
我们把链表分成三部分,
第一部分是1 ~ left-1
第二部分是left ~ right
第三部分是right ~ last
我们需要做的是把中间的部分反转。
对于中间的部分,用b指向第一个结点,c指向第二个结点,d存储c的下一个结点(因为每次交换后,c的next会丢失),然后更新bcd。
最后把三个部分拼接。

91.png

代码:

/**
 * 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 *dummy=new ListNode(-1);
        dummy->next=head;
        ListNode *a=dummy;

        for(int i=0;i<left-1;i++) a=a->next;

        ListNode *b=a->next;
        ListNode *c=b->next;

        for(int i=0;i < right-left;i++){
            ListNode *d=c->next;
            c->next=b;
            b=c,c=d;
        }
        a->next->next=c;
        a->next=b;
        ListNode *res=dummy->next;
        delete dummy;
        return res;
    }
};
0

评论区