1. 准备双指针, 一个指向当前节点,一个执行当前节点的前节点,初始化是,当前节点即为头结点,前节点即为空
2. 循环遍历当前节点,如果当前节点不为空,则①取出当前节点的下一个节点作为临时节点,
②当前节点的下一个节点指向 前节点,③前节点向后移,指向当前节点,④当前节点向前移指向临时节点。 这样子就 完成了一次反转,
3. 完成遍历 跳出循环后,前节点即为 反转后链表的头结点
/**
* 反转链表
* @param head
* @return
*/
private ListNode reverseList(ListNode head) {
// 定义前节点,执行空节点
ListNode prev = null;
// 定义当前节点 ,指向头结点
ListNode curr = head;
// 循环当前节点。只要不为空
while (curr != null) {
// 获取当前节点的下一点 定义临时变量储存
ListNode nextTemp = curr.next;
// 将当前节点的下一节点指向 前节点
curr.next = prev;
// 前节点往前移指向当前节点
prev = curr;
// 当前节点往前移指向 一开始下一节点的临时节点
curr = nextTemp;
}
// 返回前节点
return prev;
}