题解 | #反转链表#
反转链表
https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca
一种非常low的办法:
public ListNode ReverseList(ListNode head) {
if (head == null) { // 为空情况
return null;
}
if (head.next == null) { // 无子节点情况,即只有它1个
return head;
}
List<ListNode> list = new LinkedList<>();
getChildNode(head, list); // 全部添加入list
for (int i = 0; i <= list.size() - 2; i++) { // 从后向前,依次将前一个设为后一个的next节点
list.get(list.size() - 2 - i).next = null; // 需要先清掉前一个的 next节点,否则下一条执行后会形成 2.next = 3 -> 3.next = 2 -> 2.next = 3 ...... 循环
list.get(list.size() - 1 - i).next = list.get(list.size() - 2 - i);
}
return list.get(list.size() - 1); // 返回list最后一个元素,即新的头节点
}
private void getChildNode(ListNode node, List<ListNode> list) {
list.add(node);
if (node.next != null) {
getChildNode(node.next, list);
}
}