迭代法

  1. ListNode* ReverseList(ListNode* pHead) {
  2. // 判断链表为空或长度为1的情况
  3. if(!pHead || pHead->next == NULL){
  4. return pHead;
  5. }
  6. ListNode *pre = NULL; // 当前节点的前一个节点
  7. ListNode *next = NULL; // 当前节点的下一个节点
  8. while(pHead){
  9. next = pHead->next; // 记录当前节点的下一个节点位置;
  10. pHead->next = pre; // 让当前节点指向前一个节点位置,完成反转
  11. pre = pHead; // pre 往右走
  12. pHead = next;// 当前节点往右继续走
  13. }
  14. return pre;
  15. }

递归法

ListNode* reverseList(ListNode* head) {
        if (head == NULL || head->next == NULL) return head;
        ListNode* p = reverseList(head->next);
        head->next->next = head;
        head->next = NULL;
        return p;
    }