function isEmptyObject(obj) {// 判断输入参数链表是否为空 for (var name in obj) { return false; } return true; }
function ReverseList(pHead) { if (isEmptyObject(pHead)) {// 调用链表是否为空函数 return false; } var pre = null;//链表的最后一个元素 var next = null;//初始化next为null,下面再赋值 while (pHead != null) {//pHead移动,直至到链表最后一个元素,指向null,结束循环 next = pHead.next;//pHead.next值先赋给next,以免覆盖,next移动 pHead.next = pre;//改变pHead指向,给pHead.next赋值,指向null pre = pHead;//pre移动 pHead = next;//pHead移动 } return pre; }
单链表是否有环
创建哈希表,不过会占⽤较⼤的空间,不是最佳⽅法.( 时间复杂度 O(n) )
1 2 3 4 5 6 7 8 9 10
function judge(list){ var set =new Set(); while(list){ if(set.has(list)){ return true } set.add(list) list=list.next() } }
给节点添加 visited 访问标记 (时间复杂度 O(n)), 不需要额外的空间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
function LinkedList(){ var Node=function(){ this.element=element; this.next=null; this.visited=0; //访问标记 } }