C语言ReverseRange反转链表指定范围仅输出单节点问题求助
问题根因
问题核心出在ReverseRange函数的指针操作逻辑上:
- 你在函数内将传入的头指针
*H赋值给了局部变量Head,调用Reverse(&Head)之后,仅修改了这个局部变量的指向,没有把反转后的新头节点回写到传入的指针地址*H中。 - 执行
Reverse操作时,原链表的第一个节点Q的next已经被置为NULL,但原链表头指针还是指向Q,所以打印时只会输出单个Q节点。
修复方案
只需要在ReverseRange中调用Reverse的逻辑后,把局部Head的值回写到*H即可:
if (x == 1 && y == LengthRec(Head)) { Reverse(&Head); *H = Head; // 新增这行,把反转后的新头回写到原指针 return 1; }
另外补充:ReverseRange函数存在分支没有返回值的问题,当LengthRec(Head) < y时函数没有return,建议补充对应分支的返回值避免编译警告。
修复后运行输出
T R E W Q Q W E R T T R E W Q
内容的提问来源于stack exchange,提问作者roshannepal_x
相关产品推荐
相关产品推荐

