struct Node { int data; Node *ptr; }; // 迭代 Node *reverse(Node *head) { if (head == NULL) { return NULL; } Node *pre, *cur, *n; pre = head; cur = head->ptr; while (cur) { n = cur->ptr; cur->ptr = pre; pre = cur; cur = n; } head->ptr = NULL; return pre; } // 递归 Node *reverse_r(Node *cur, Node *pre = NULL) { if (cur == NULL) { return NULL; } Node *tmp = cur->ptr; cur->ptr = pre; return tmp == NULL ? cur : reverse_r(tmp, cur); }