栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Leetcode之92. 反转链表 II

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Leetcode之92. 反转链表 II

提交记录

执行结果:

解题思路:

  1. 将l、r指针分别分配到区间开始位置与结束位置(注意边界问题);
  2. 用p、q指针在反转区间开始反转链表(注意首先将反转区间的第一个结点的next指向空);
  3. 将三短区间链接;

语言:C++

class Solution {
public:
    ListNode* reverseBetween(ListNode* head, int left, int right) {
        while(left==right||head->next==NULL){return head;}
        
        ListNode *dummy=new ListNode(-1);
        dummy->next=head;
        ListNode *l=dummy;
        ListNode *r=dummy;
        ListNode *p=NULL;
        ListNode *q=NULL;
        ListNode *n=NULL;
        
        left=left-1;
        while(left){
            l=l->next;
            left--; 
        }        
        while(right+1){
            r=r->next;
            right--; 
        }

        p=l->next;
        q=p->next;
        
        p->next=NULL;
        n=p;
            
        while(q!=r){
            ListNode *s=q->next;
            q->next=p;
            p=q;
            q=s;
        }
        l->next=p;
        n->next=r;

        return dummy->next;

    }
};
细节提升 1.边界问题

自己写示例把边界问题测试一下,插入哨兵节点可以避免很多边界问题。

        ListNode *dummy=new ListNode(-1);
        dummy->next=head;

        return dummy->next;
2.插入左右边界
        left=left-1;
        while(left){
            l=l->next;
            left--; 
        }        
        while(right+1){
            r=r->next;
            right--; 
        }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/836749.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号