题目描述
反转一个单链表。
示例
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
解题思路
本题目可以通过三种方法,递归和非递归(迭代)和 创建新数组 的方法实现。
1、非递归(迭代)算法
对于上面的例子,可将结点1的指针指向空,结点2的指针指向结点1,以此类推,结点5指向结点4,即可完成链表的逆置。
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* pCurrent = head;
ListNode* pCurNext = pCurrent->next;
pCurrent->next = NULL;
while(pCurNext)
{
ListNode* tmp = pCurrent;
pCurrent = pCurNext;
pCurNext = pCurNext->next;
pCurrent->next = tmp;
}
return pCurrent;
}
};
2、递归算法
和非递归的思路一致,只不过递归的方法是从后向前逆置链表。还是上述的例子,通过递归,让 h e a d head head指针下移,直到指向结点4,结点4的 n e