方式一:使用栈
栈先进后出的规则
1——>2——>3
出栈
3——>2——>1
但是1节点仍然指向着2,形成了2节点与1节点的循环,所以要使最后节点指针指向null
public ListNode ReverseList(ListNode head) { if (head == null) return null; // 栈头进尾出,列表尾节点出栈重新指定节点的指向 Stack<ListNode> stack = new Stack<>(); ListNode node = head; // 节点压栈 while (node != null) { stack.push(node); node = node.next; } // 出栈 // 第一个节点出栈,头节点 node = stack.pop(); // 出栈的节点 ListNode preNode = node; // 出栈节点的后一个节点 ListNode lastNode = null; // 循环出栈,且更新节点 while (!stack.empty()) { lastNode = stack.pop(); preNode.next = lastNode; preNode = lastNode; // 防止后一个节点指向前一个节点而最后造成循环 lastNode.next = null; } return node; }