LeetCode206:Reverse Linked List

Reverse a singly linked list.

分别用迭代和递归实现

struct ListNode
{
    int val;
    struct ListNode *next;
};

迭代实现:

struct ListNode* reverseList(struct ListNode* head)
{
    struct ListNode *pre = NULL;
    struct ListNode *cur = head;
    while( cur != NULL )
    {
        struct ListNode *after = cur->next;
        cur->next = pre;
        pre = cur;
        cur = after;
    }
    return pre;
}

递归实现:

1)如果head为空,或者只有head这一个节点,return head即可;

2)先遍历head->next为首的链表,得到一个头结点newHead;

3)把head赋值给head->next->next, head->next为空;

4)返回newHead。

struct ListNode* reverseList(struct ListNode* head)
{
    if(head == NULL || head->next == NULL)
        return head;
    
    struct ListNode* newHead = reverseList(head->next);
    head->next->next = head;
    head->next = NULL;
    return newHead;
}
原文地址:https://www.cnblogs.com/evansyang/p/5446678.html