链表p到q位置子链表反转实现及连接逻辑错误排查
链表指定区间反转问题解答
错误原因
你注释掉的旧连接逻辑的核心问题是仅修改了局部变量的指向,没有改动链表节点的next属性,没有真正修改链表的连接关系:
- 当你遍历
first_list到前半段末尾后,执行first_list = sub_list,只是修改了first_list这个局部变量的指向,前半段尾节点的next属性完全没有被更新,所以前半段和反转子链表没有实际连接上。 - 后续执行
sub_list = last_list同理,只是修改了sub_list这个局部变量的指向,反转后子链表的尾节点的next属性没有被设置为后半段链表的头节点,因此子链表和后半段也没有连上。最终就会出现链表只返回前两个节点的问题。
现有代码说明
你当前未被注释的连接逻辑是正确的,运行后会输出预期结果:
Nodes of original LinkedList are: 1 2 3 4 5 Nodes of reversed LinkedList are: 1 4 3 2 5
如果你的运行结果不对,检查是否误执行了注释内的错误逻辑。
逻辑优化建议
如果要沿用你最初的思路实现连接,只要把局部变量赋值改为修改节点的next属性即可,和你当前生效的代码逻辑一致:
- 前半段尾节点
previous的next指向反转后的子链表头 - 原p位置节点(也就是反转后的子链表尾节点)的
next指向后半段头节点end
内容的提问来源于stack exchange,提问作者Michael Torres
相关产品推荐
相关产品推荐

