方式一:使用栈
栈先进后出的规则
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;
}
京公网安备 11010502036488号