反转链表时为什么需要将head赋值为prev才能完成反转操作?
问题属性说明
这个问题和泛型完全没有关系,属于链表头指针的维护逻辑问题。
head = prev的必要性
- 你实现的LinkedList类中存在成员变量
head,用于指向当前链表的首个节点,链表的遍历、输出等常规操作都默认从这个head节点开始执行。 - 反转循环的终止条件为
head == null:循环执行结束时,所有节点的指针已经完成反转,此时prev变量正好指向反转后新链表的首个节点,而成员变量head此时的值为null。 - 如果你省略
head = prev这行赋值操作,后续执行链表输出逻辑时会从值为null的head开始遍历,自然会得到空列表[]的结果。
额外代码风险提示
你当前代码里的打印语句存在空指针异常隐患:
System.out.println("head: " + head.next + "\nprev: " + prev.next);
当循环处理到原链表最后一个节点时,next变量会被赋值为null,执行head = next之后head已经是空值,此时访问head.next会直接抛出空指针异常,建议把打印语句调整到head = next语句之前执行。
内容的提问来源于stack exchange,提问作者Jonny
相关产品推荐
相关产品推荐

