LeetCode92-反轉鏈表 II

LeetCode92-反轉鏈表 II

最近全國疫情嚴重,待在家裏沒事幹,馬上又要準備春招了,最近刷刷題,記錄一下!再說一句,武漢加油,大家出門記得戴口罩!

1、題目

反轉從位置 m 到 n 的鏈表。請使用一趟掃描完成反轉。
說明:
1 ≤ m ≤ n ≤ 鏈表長度。
示例:

輸入: 1->2->3->4->5->NULL, m = 2, n = 4
輸出: 1->4->3->2->5->NULL

2、思路

在這裏插入圖片描述

3、代碼

c++

class Solution {
public:
    ListNode* reverseBetween(ListNode* head, int m, int n) {
        if(m==n) return head;
        auto dummy=new ListNode(-1);
        dummy->next=head;
        auto a=dummy;
        auto d=dummy;
        for(int i=0;i<m-1;i++) a=a->next;
        for(int i=0;i<n;i++) d=d->next;
        auto b=a->next;
        auto c=d->next;
        //第一步
        for(auto p=b,q=b->next;q!=c;)
        {
            auto o=q->next;
            q->next=p;
            p=q;
            q=o;
        } 
        //第二步
        b->next=c;
        a->next=d;
        return dummy->next; 
    }
};

Java

class Solution {
    public ListNode reverseBetween(ListNode head, int m, int n) {
        if(m==n) return head;
        ListNode dummy=new ListNode(-1);
        dummy.next=head;
        ListNode a=dummy;
        ListNode d=dummy;
        for(int i=0;i<m-1;i++) a=a.next;
        for(int i=0;i<n;i++) d=d.next;
        ListNode b=a.next;
        ListNode c=d.next;
        //第一步
        for(ListNode p=b,q=b.next;q!=c;)
        {
            ListNode o=q.next;
            q.next=p;
            p=q;
            q=o;
        } 
        //第二步
        b.next=c;
        a.next=d;
        return dummy.next;    
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章