LeetCode 206. Reverse Linked List 题解(C++)

来源:互联网 发布:windows网络连接不可用 编辑:程序博客网 时间:2024/05/07 03:08

LeetCode 206. Reverse Linked List 题解(C++)


题目描述

  • Reverse a singly linked list.

思路

迭代

  • 设置三个指针分别指向当前结点,当前结点的前一结点和当前结点的后一结点,之后遍历整个链表,使当前结点指向上一结点,并依次将三个指针向下一结点移动。

递归

  • 对当前结点的下一结点做递归,返回倒置后的链表,之后使当前结点的下一结点指向当前结点,当前结点指向NULL。

代码

迭代

class Solution{public:    ListNode* reverseList(ListNode* head)     {        if (head == NULL)        {            return NULL;        }        ListNode *previousNode = NULL;        ListNode *currentNode = head;        ListNode *nextNode = head->next;        while (nextNode != NULL)        {            currentNode->next = previousNode;            previousNode = currentNode;            currentNode = nextNode;            nextNode = currentNode->next;        }        currentNode->next = previousNode;        return currentNode;    }};

递归

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