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;
}
};