反转链表
●定义两个指针: pre和cur ; pre在前cur在后。
●每次让pre的next指向cur,实现-次局部反转
●局部反转完成之后,pre和cur同时往后移动-一个位置
●循环上述过程,直至pre到达链表尾部

class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* cur = NULL, *pre = head;
while (pre != NULL) {
ListNode* t = pre->next;
pre->next = cur;
cur = pre;
pre = t;
}
return cur;
}
};
简洁的递归
●使用递归函数,一直递归到链表的最后-个结点,该结点就是反转后的头结点,记作ret .
●此后,每次函数在返回的过程中,让当前结点的下一个结点的next指针指向当前节点。
●同时让当前结点的next指针指向NULL,从而实现从链表尾部开始的局部反转
●当递归函数全部出栈后,链表反转完成。

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