2022年10月26日 星期三

[92] Reverse Linked List II

寫了一整天, 這絕對不是可以接受的時間啊哈哈哈哈哈~~~(奔入雨中)
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

struct ListNode* reverseBetween(struct ListNode* head, int left, int right){
    if ((left == right) || (head == NULL) || (head -> next == NULL))
        return head;
    int count=1;
    struct ListNode *pPre, *pCurr, *pNext;
    struct ListNode *pPreLeft,*pLeft;
    pPreLeft=NULL;
    pLeft = head;
    while(count++ <left)
    {
        pPreLeft=pLeft;
        pLeft = pLeft->next;
    }
    pPre = pPreLeft;
    pCurr = pLeft;
    pNext = pCurr;
    count-=1;
    while(count++ < right)
    {
        pNext = pCurr->next;
        pCurr->next = pPre;
        pPre=pCurr;
        pCurr = pNext;        
    }

    pLeft->next = pCurr->next;
    pCurr->next = pPre;
    pPre=pCurr;
    
    if(pPreLeft==NULL)
        head=pPre;
    else
        pPreLeft->next = pPre;
    
    return head;
}

哦看了一下別人的解法, 似乎可以沿路把pre-reverse 的next 先指去下一個呀!
貌似不錯~(thinking 圖)
也就是說我離開while 後的前後接link 其實可以都包進while 裡面!

沒有留言:

張貼留言