翻转链表的循环实现很简单,但是递归实现想了很久也没有想到,看了下网上帖子才恍然大悟,基本原理就是利用递归到最后一个节点,然后反递归的方向,利用链表的性质(可以找到当前节点之后的任何节点的位置),把当前节点的指针赋给原链表后一个指针的Next指针。本质上利用的还是链表和递归的基本性质。
//递归方式 Node * reverseList(List head) { //如果链表为空或者链表中只有一个元素 if(head == NULL || head->next == NULL) { return head; } else { //先反转后面的链表,走到链表的末端结点 Node *newhead = reverseList(head->next); //再将当前节点设置为后面节点的后续节点 head->next->next = head; head->next = NULL; return newhead; } }