题目描述
反转一个单链表。
示例
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
思路:定义一个前驱节点,从前往后遍历节点,遍历的过程中将记录当前节点cur的下一个节点 next = cur->next.然后将当前节点的下一个节点指向前驱节点即可。时间复杂度为O(n)
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode *prev = NULL; //定义前驱节点
ListNode *cur = head;
while(cur)
{
auto next = cur->next;
cur ->next = prev;
prev = cur; //前驱节点向后移动一个位置
cur = next;
}
return prev;
}
};
递归:
ListNode* reverseList(ListNode* head) {
return reverse(head, NULL);
}
ListNode* reverse(ListNode* head, ListNode *prev) {
if(!head) return prev;
ListNode *next = head->next;
head->next = prev;
return reverse(next, head);
}