题解 | #反转链表#
反转链表
https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca
import java.util.*; import java.util.Stack; /* * 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) { // write code here Stack<ListNode> stack = new Stack<>(); //生成栈stack ListNode copyhead = head; //思考一下head.next的值,可能你就错在这里了。 //把链表节点全部摘掉放到栈中 while (copyhead != null){ stack.push(copyhead); //push()放入栈 copyhead = copyhead.next; //head指向下一个结点 } if(stack.isEmpty()){ //isEmpty()判断栈是否为空 return null; } ListNode node = stack.pop(); //第一次pop()出栈,即头结点 ListNode newhead = node; //新的头节点诞生 //栈中的结点全部出栈 while (!stack.isEmpty()){ node.next = stack.pop(); //从头结点的下一个结点开始,循环出栈 node = node.next; //node指向下一个结点 } /*最后一个结点就是反转前的头结点, 由于刚开始的头结点head存放的下一个结点地址不为空, 且指向的一定是head.next或null(只有一个头结点); 这就是为什么我会多一步ListNode copyhead = head; 一定要让它的next等于空,否则会构成环*/ node.next = null; return newhead; } }#算法初学者##java##数据结构##反转列表#