• LeetCode 92. Reverse Linked List II


    92. Reverse Linked List II

    Reverse a linked list from position m to n. Do it in one-pass.
    将位置m的链接列表反转到n。 一次通过。

    Note: 1 ≤ m ≤ n ≤ length of list.

    Example:

    Input: 1->2->3->4->5->NULL, m = 2, n = 4
    Output: 1->4->3->2->5->NULL

    代码

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* reverseBetween(ListNode* head, int m, int n) {
            int change_len=n-m+1;       //计算需要逆置的节点个数
            ListNode *pre_head=NULL;    //初始化开始逆置的节点的前驱
            ListNode *result=head;      //最终转换后的链表头节点,非特殊情况即为head
            while(head && --m)
            {
                pre_head=head;      //记录head的前驱
                head=head->next;
            }
            ListNode *modify_list_tail = head;      //将modify_list_tail指向当前的head,即逆置后的链表尾
            ListNode *new_head = NULL;
            while(head&&change_len)
            {//逆置change_len个节点
                ListNode *next=head->next;
                head->next=new_head;
                new_head=head;
                head=next;
                change_len--;       //每完成一个节点逆置,change_len--;
            }
            modify_list_tail->next=head;     //连接逆置后的链表尾与逆置段的后一个节点
            if(pre_head)
            {//如果pre_head不空,说明不是从第一个节点开始逆置的,m>1
                pre_head->next=new_head;    //将逆置链表开始的节点前驱与逆置后的头节点连接
            }
            else
            {//如果pre_head为空,说明m==1,从第一个节点开始逆置,结果即为逆置后的头节点
                result=new_head;
            }
            return result;
        }
    };
    

    分析

    首先找到四个关键的节点:逆置段头节点的前驱、逆置前头节点即逆置后尾节点、逆置前尾节点即逆置后头节点、逆置段尾节点的后继;

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    codeforces234C
    codeforces340D
    Codeforces Round #259 (Div. 2) 解题报告
    memset 赋值
    codeforces2B
    codeforces431C
    Node.js权威指南 (10)
    归档普通对象Demo示例程序源代码
    联系人数据存储Demo源代码
    1211笔记关于//modal//更改窗口的根控制器//数据存取//Plist属性列表//-“沙盒机制”//plis属性列表//偏好设置//归档普通对象//联系人数据存储//协议与回调函数
  • 原文地址:https://www.cnblogs.com/AlexKing007/p/12338471.html
Copyright © 2020-2023  润新知