JavaScript中如何动态访问属性访问器,实现链表第n个next节点快速获取
实现方案
你可以通过封装遍历逻辑实现需求,以下是两种常用的实现方式:
1. 通用工具函数实现
独立封装的工具函数不需要修改原有ListNode类的定义,兼容性最强:
function getNthNextNode(head, n) { let current = head; for (let i = 0; i < n; i++) { // 链表长度不足时提前返回,避免报错 if (!current) return null; current = current.next; } return current; } // 调用示例:获取第100个.next节点 const targetNode = getNthNextNode(answerList, 100);
2. 原型扩展实现(可选)
如果项目中频繁用到该能力,可以直接给ListNode扩展原型方法,调用更简洁:
ListNode.prototype.getNthNext = function(n) { let current = this; for (let i = 0; i < n; i++) { if (!current) return null; current = current.next; } return current; } // 调用示例 const targetNode = answerList.getNthNext(100);
注意事项
- 上述实现默认
n=0返回原节点,n=1返回第一个.next节点,和你要获取第100个.next节点的需求完全匹配,直接传参数100即可 - 内置了边界判断逻辑,若链表实际长度不足100个后续节点,会直接返回
null避免类型错误,你也可以根据业务需求调整为抛出异常提示 - 循环实现的时间复杂度为O(n)、空间复杂度为O(1),是链表遍历的最优方案,不会出现递归实现可能导致的栈溢出问题
内容的提问来源于stack exchange,提问作者Anon
相关产品推荐
相关产品推荐

