Leetcode -- Reverse Linked List II

題目:
Reverse a linked list from position m to n. Do it in-place and in one-pass.
For example:
Given 1->2->3->4->5->NULL, m = 2 and n = 4,
return 1->4->3->2->5->NULL.
Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list

分析:
將鏈表中間[m, n]之間的noed反轉。

思路:
找到第m個node,開始反轉,一直到第n個node。
在處理過程中,要注意m=1開始反轉的用例,這個時候,應該改變原始鏈表head指針的指向;當m=n時,是不需要進行反轉的。

代碼:

ListNode* reverseBetween(ListNode* head, int m, int n) {
        if(m == n || !head) return head;

        ListNode* lHead = head;
        ListNode* lHead_before = new ListNode(0);
        ListNode* last;
        ListNode* last_next;
        ListNode* pre;
        int start = m - 1;
        int end = n -1;
        while(start != 0)
        {
            lHead_before = lHead;
            lHead = lHead->next;
            start --;
            end --;
        }
        last = lHead;
        last_next = lHead->next;
        while(end != 0)
        {
            pre = last;
            last = last_next;
            last_next = last->next;
            last->next = pre;
            end = end - 1;
        }
        if(m == 1)
        {
            head = last;
            lHead ->next = last_next;
        }
        else
        {
            lHead_before->next = last;
            lHead->next = last_next;
        }
        return head;
    }
發佈了40 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章