为何LinkedList静态方法中this.head判断不符合预期?求解答
问题分析与解决
问题原因
你写的static add是静态方法,这里的this指向的是LinkedList类本身,而不是通过new LinkedList()创建的实例。head属性是在实例的构造函数里定义的,类本身并没有这个属性,所以this.head的值是undefined。undefined === null的结果是false,因此会进入else分支输出false。
修复方案
你要实现的是给链表实例添加节点,所以add方法不应该是静态方法,改成实例方法即可:
class Node { constructor(value) { this.value = value; this.next = null; } } class LinkedList { constructor(){ this.head = null; this.size = 0; } // 去掉static关键字,改为实例方法 add(value) { let node = new Node(value); if(this.head === null){ console.log(true); this.head = node; }else { console.log(false); // 处理非空链表,将节点追加到尾部 let current = this.head; while(current.next !== null) { current = current.next; } current.next = node; } this.size++; } } // 创建链表实例后调用add方法 const myList = new LinkedList(); myList.add(5); // 输出true myList.add(10); // 输出false
如果确实需要用静态方法(比如批量给实例添加节点的场景),可以让静态方法接收链表实例作为参数:
static addToList(list, value) { let node = new Node(value); if(list.head === null){ console.log(true); list.head = node; }else { console.log(false); let current = list.head; while(current.next !== null) { current = current.next; } current.next = node; } list.size++; } // 使用方式 const myList = new LinkedList(); LinkedList.addToList(myList, 5); // 输出true
内容的提问来源于stack exchange,提问作者Aliayub Ali
相关产品推荐
相关产品推荐

