反转链表

ListNode *reverse(ListNode *head) {
  ListNode *cur = head;
  ListNode *pre = nullptr;
  while (cur != nullptr) {
    ListNode *tmp = cur->next; // 暂存后继节点 cur.next
    cur->next = pre;           // 修改 next 引用指向
    pre = cur;                 // pre 暂存 cur
    cur = tmp;                 // cur 访问下一节点
  }
  return pre;
}

预设两指针,cur指向当前,pre指向上一个。 当cur不等于nullptr时,做循环。 1. 保存下地址 2. 切换链方向 3. 移动前后针