题解 | #反转链表#
反转链表
https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ public ListNode ReverseList (ListNode head) { // 如果是空链表直接返回 if (head == null) { return null; } // 用堆来做,堆的特性是先进后出,所以头进去尾出来,堆最上面的元素就是链表的最后一个元素 Stack<ListNode> stack = new Stack<>(); // 循环条件为当前节点非空 while (head != null) { // 将当前节点压入堆 stack.push(head); // 移到到下个节点 head = head.next; } // 此时堆顶部为反转链表的头结点 ListNode node = stack.pop(); // 因为node指针要移动,所以创建变量newHead来记录反转后链表的头结点 ListNode newHead = node; // 循环条件为堆非空 while (!stack.isEmpty()) { // 从堆中取出 ListNode tempNode = stack.pop(); // 一开始node是指向头结点的,所以这里要记录下个节点是谁 node.next = tempNode; // 移动到下个节点 node = node.next; } // 最后一个指向空 node.next = null; return newHead; } }