LeetCode 刷题 -- 反转一个单链表

Reverse a singly 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) {
        if(head == NULL)
        {
            return NULL;
        }
        
        if(head->next == NULL)
        {
            return head;
        }
        
        ListNode *pre, *next;
        ListNode *it = head;
        pre = NULL;
        
        
        while(it)
        {
            next = it->next;
            it->next = pre;
            pre = it;
            it = next;
        }
        
        return pre;
    }
};

递归实现:


Youtube上有个视频对递归实现讲得不错:


https://www.youtube.com/watch?v=MRe3UsRadKw



class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if(head==NULL || head->next == NULL)
        {
            return head;
        }
        
        ListNode* root = reverseList(head->next);
        head->next->next = head;
        head->next = NULL;
        return root;
    }
};



你可能感兴趣的:(LeetCode,刷题)