- 一、题目
- 二、解题思路
- 三、解题代码
一、题目
定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。
二、解题思路
①遍历。将指向下一个节点的指针指向上一个节点。
②递归。先让指向下一个节点的指针为空,然后递归调用,最后再将指向下一个节点的指针指向上一个节点。
三、解题代码
遍历
/*** 反转单链表* @param head* @return*/private static Node reverseHead(Node head) {if (head == null) {return head;}Node pre = head;Node cur = head.nextNode;Node next = null;while(cur != null){next = cur.nextNode;cur.nextNode = pre;pre = cur;cur = next;}head.nextNode = null;head = pre;return head;}
递归
/*** 递归反转* @param head* @return*/private static Node reverseByRecur(Node current) {if (current == null || current.nextNode == null) return current;Node nextNode = current.nextNode;current.nextNode = null;Node reverseRest = reverseByRecur(nextNode);nextNode.nextNode = current;return reverseRest;}
