Reverse Linked List

解题思路:三指针,跟踪算法的步骤例如以下:
算法跟踪

代码例如以下:

/**
 * 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 *p;
        p = head;
        int counter = 0;
        for(; p != NULL; ) {
            counter++;
            p = p->next;
        }

        if(counter == 0) {
            return NULL;
        }

        if(counter == 1) {
            return head;    
        }

        if(counter == 2) {
            ListNode *p21, *p22;
            p21 = head;
            p22 = p21->next;
            p21->next = NULL;
            p22->next = p21;
            return p22;
        }

        ListNode *p1, *p2, *p3;
        p1 = head;
        p2 = head->next;
        p3 = head->next->next;
        head->next = NULL;
        for(; p3 != NULL; ) {
            p2->next = p1;
            p1 = p2;
            p2 = p3;
            p3 = p3->next;
        }
        p2->next = p1;
        return p2;




    }
};
posted on 2017-06-23 15:56  blfbuaa  阅读(63)  评论(0编辑  收藏  举报