Reverse Linked List & Reverse Linked List II

思路:这里利用prev=head实现链表的reverse

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode *prev = nullptr;
        ListNode * tmp = nullptr;
        while(head != nullptr)
        {
            tmp = head->next;
            head->next = prev;
            prev = head;
            head = tmp;
        }
        
        return prev;
    }
};

Reverse Linked List II

思路:使用头插法,特别注意连接的先后顺序

/**
 * 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) {
        ListNode dummy(-1);
        dummy.next = head;
        ListNode *prev = &dummy;
        
        for(int i=1; i<m; ++i)
            prev = prev->next;
        ListNode *head1 = prev;
        prev = prev->next;
        ListNode *cur = prev->next;
            
        for(int i=m; i<n; ++i)
        {
            prev->next = cur->next;
            cur->next = head1->next;
            head1->next = cur;
            cur = prev->next;
        }
        
        return dummy.next;
    }
};

 

posted @ 2017-03-13 19:23  chengcy  Views(113)  Comments(0)    收藏  举报