美文网首页Leetcode
Leetcode 92. Reverse Linked List

Leetcode 92. Reverse Linked List

作者: SnailTyan | 来源:发表于2018-10-14 13:30 被阅读2次

    文章作者:Tyan
    博客:noahsnail.com  |  CSDN  |  简书

    1. Description

    Reverse Linked List II

    2. Solution

    /**
     * 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) {
            if(m == n) {
                return head;
            }
            ListNode* start = nullptr;
            ListNode* end = nullptr;
            ListNode* left = nullptr;
            ListNode* right = nullptr;
    
            ListNode* pre = nullptr;
            ListNode* current = head;
            ListNode* next = nullptr;
            int diff = n - m + 1;
            m--;
            while(m) {
                pre = current;
                current = current->next;
                m--;
            }
            start = pre;
            right = current;
            while(diff) {
                next = current->next;
                current->next = pre;
                pre = current;
                current = next;
                diff--;
            }
            left = pre;
            end = current;
            right->next = end;
            if(start) {
                start->next = left;
                return head;
            }
            else {
                return left;
            } 
        }
    };
    

    Reference

    1. https://leetcode.com/problems/reverse-linked-list-ii/description/

    相关文章

      网友评论

        本文标题:Leetcode 92. Reverse Linked List

        本文链接:https://www.haomeiwen.com/subject/bwvzaftx.html