leetcode 92 反转部分单链表

先解释一下这个题,就是指定一个范围,把这个范围内的数反转。比如2->1->5->4->3->null,反转(2,4):2->4->5->1->3->null

首先是要注意限制,那么如果表为空,返回self;而数字上的限制,因为已经说明:

Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.

所以不用考虑m>n啊之类的问题。于是只用控制一个量,就是m==n,因为m到结尾也最多是m==n,不需要做太多控制。
代码如下:

ListNode* reverseBetween(ListNode* head, int m, int n) {
    if(head == nullptr || m==n)
        return head;
    //快速创建一个,设为0,next指向原链表
    ListNode *newList = new ListNode(0);
    newList->next = head;
    ListNode *pre = newList;
    for(int i = 1; i < m; ++i)
        pre = pre->next;
    ListNode *cur = pre->next;
    ListNode *tmp = nullptr;
    for(int i = 0; i< n - m; ++i) {
        tmp = cur->next;
        cur->next = pre;
        pre = cur;
        cur = tmp;
    }
    return newList->next;
}

我们可以看出,反转链表的核心操作都是中间那4句话,i.e.,后边的指向后边,当前后边的指向前边,前边的指向当前,当前指向后边。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这个不错分享给大家,从扣上看到的,就转过来了 《电脑专业英语》 file [fail] n. 文件;v. 保存文...
    麦子先生R阅读 11,658评论 5 24
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,349评论 0 33
  • 相信未来 当蜘蛛网无情地查封了我的炉台 当灰烬的余烟叹息着贫困的悲哀 我依然固执地铺平失望的灰烬 用美丽的雪花写下...
    来自申论55的觉悟阅读 1,443评论 0 0
  • 新的一天,又一个鲜亮亮的清晨。当你睁开眼,是否觉得世界依然令你好奇。敞开你的心扉,轻抬手紧紧抓住那份热爱...
    心中那枝梅阅读 812评论 0 0
  • 水有千娇态,独怜寡淡无香。升腾滚沸无颜色,跌宕自徜徉。 世事应如此水,历经冷暖沧桑。雄关漫道真如铁,成败又何妨?
    良柳如烟阅读 1,729评论 0 5