LeetCode 206. Reverse Linked List--Multiple Solutions

LeetCode 206. Reverse linked list
using virtual head node

/**
 * 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 vh;
        vh.next = NULL;
        ListNode *p = head;
        ListNode *q;
        while (p) {
    
    
            q = p->next;
            p->next = vh.next;
            vh.next = p;
            p = q;
        }
        return vh.next;
    }
};

Do not use virtual head nodes

class Solution {
    
    
public:
    ListNode* reverseList(ListNode* head) {
    
    
        ListNode *ret = NULL, *p = head, *q;
        while (p) {
    
    
            q = p->next;
            p->next = ret;
            ret = p;
            p = q;
        }
        return ret;
    }
};

recursive writing

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

Guess you like

Origin blog.csdn.net/weixin_44119881/article/details/112066196