题目

题意:反转一个单链表。
示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL

思路

不要新建链表,浪费空间
就是改变next方向就好。
这道题看动图就很容易理解了,
坑在于,循环条件的设置

双指针法

反转链表双指针.gif

  1. class Solution {
  2. public:
  3. ListNode* reverseList(ListNode* head) {
  4. ListNode* pre =NULL;
  5. ListNode* cur =head;
  6. while(cur){
  7. ListNode* temp =cur->next; //最后一次循环,temp指向尾节点的下一个,即空,所以判断条件为cur非空
  8. cur->next =pre;
  9. pre =cur;
  10. cur =temp;
  11. }
  12. return pre;
  13. }
  14. };