• 92. Reverse Linked List II


    一、题目分析

      题目要求逆转链表的第m到第n个之间的结点,因此思路是,讲m和n之间的结点单独拎出来作为一个单独的链表,进行逆转

      然后问题退化为,逆转一个单链表。

      可以采用递归的方式,每次传入上一个结点和当前结点,将当前结点指向上一个结点

      然后将当前结点和下一个结点再次调用该方法

      代码如下所示:

    class Solution {
    public:
        //逆转链表,head是下部分的链表头,last是上一个节点。
        ListNode* reverseList(ListNode* head, ListNode* last)
        {
            if(head)
            {
                ListNode* next = head->next;
                head->next = last;
                return this->reverseList(next, head);
            }
            return last;
        }
        
        //逆转链表,第m->n个节点
        ListNode* reverseBetween(ListNode* head, int m, int n) {
            
            ListNode *dummy = new ListNode(-1);
            dummy->next = head;
            
            ListNode *p = dummy;
            ListNode *pLeftPrev = NULL, *pLeft = NULL, *pRight = NULL, *pRightNext = NULL;
            for (int i = 0; i <= n && p; i++) {
                
                if(i == m - 1)
                {
                    pLeftPrev = p;
                    pLeft = p->next;
                }
                
                if(i == n)
                {
                    pRight = p;
                    pRightNext = p->next;
                }
                
                p = p->next;
            }
            
            pRight->next = NULL;
            this->reverseList(pLeft, NULL);
            
            pLeftPrev->next = pRight;
            pLeft->next = pRightNext;
            p = dummy->next;
            free(dummy);
            
            return p;
        }
    };
  • 相关阅读:
    vscode, cmake编译多个C++文件
    pytorch下的lib库 源码阅读笔记(1)
    pytorch学习笔记
    SSH无密码登录及远程拷贝命令SCP的使用
    Hadoop启动方式
    Hadoop出现的错误及处理
    Hadoop安装
    Hadoop生态系统图解
    shell脚本入门基础知识
    python中迷茫的编码问题
  • 原文地址:https://www.cnblogs.com/doudouyoutang/p/9484727.html
Copyright © 2020-2023  润新知