JavaScript合并链表时空链表赋值无效及输出含undefined问题咨询
问题原因解答
初始版本代码(仅修改current变量)失效的原因
- 在JavaScript中,
current = l1.head属于值拷贝操作:当l1.head为null时,null是基础类型,你只是把null的值赋值给了current变量,后续执行current = l2.head仅仅是修改了current变量本身的存储值,完全没有修改l1实例的head属性,所以l1.head始终保持为null,自然打印l1的时候没有任何链表数据。 - 你编写的
mergeTwoLists函数存在的也是同样问题:只修改了局部变量current的指向,没有对l1的head属性做任何赋值操作,所以执行后l1.head仍然是null。
修改版本代码可正常打印但末尾多出undefined的原因
- 你直接修改
l1.head = l2.head,是直接对l1实例的head属性赋值,让它指向了l2的头节点,所以遍历链表的时候能正确拿到l2的所有元素,打印出1、3、4。 - 末尾多出的undefined是因为你调用了
console.log(l1.show()):你定义的show方法本身没有显式return返回值,JavaScript中函数没有return时默认返回undefined,show方法内部已经完成了三次console.log打印节点数据,外层的console.log又把show方法返回的undefined打印了出来,所以末尾多了一行undefined。 - 额外提醒:你修改
l1.head的时候仅同步了头节点指向,没有同步更新l1的size属性,此时l1的size还是0,后续调用insertAt、removeat等依赖size的方法会出现逻辑错误,建议追加l1.size = l2.size的赋值操作。
内容的提问来源于stack exchange,提问作者user17146394
相关产品推荐
相关产品推荐

