题目

206 翻转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表
示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL

思路

并没有添加或者删除节点,仅仅是改变next指针的方向。那么接下来看一看是如何反转的呢?
和数组一样,原地变化最好的解决方法是双指针法。拿示例中的链表来举例,如动画所示leetcode206 - 图1

  1. class Solution {
  2. public:
  3. ListNode* reverseList(ListNode* head) {
  4. ListNode* temp; // 保存cur的下一个节点
  5. ListNode* cur = head;
  6. ListNode* pre = NULL;
  7. while(cur) {
  8. temp = cur->next; // 保存一下 cur的下一个节点,因为接下来要改变cur->next
  9. cur->next = pre; // 翻转操作
  10. // 更新pre 和 cur指针
  11. pre = cur;
  12. cur = temp;
  13. }
  14. return pre;
  15. }
  16. };