核心提示:在进行单链表去重之前,我们先来考虑一下,数组如何就地去重。我们可以很容易的编写出这样的代码:如果通过正向遍历来删除的话,就要注意控制遍历的长度function arrRemoveRepeatFront...
在进行单链表去重之前,我们先来考虑一下,数组如何就地去重。
我们可以很容易的编写出这样的代码:
如果通过正向遍历来删除的话,就要注意控制遍历的长度
function arrRemoveRepeatFront(arr) { for(var i=0; i如果我们从数组尾部开始遍历,不用担心数组长度的改变。比较好理解 function arrRemoveRepeatBack(arr) { var index = arr.length - 1; while(index >= 0) { if(arr.indexOf(arr[index]) < index) { arr.splice(index, 1); } index--; // 注意看index 是在if里面还是外面。 } return arr; }
好,我们借鉴上面的思路,function LinkedList() { var Node = function (element) { this.element = element; this.next = null; } var head = null; // keep the head pointer var length = 0; // keep the length of linked list this.append = function (element) { var new_node = new Node(element); if(head == null) { head = new_node; }else { var current = head; while(current.next != null) { current = current.next; } current.next = new_node; } length++; } this.insert = function (position, element) { var new_node = new Node(element); if(position <= 0) { new_node.next = head; head = new_node; length++; return; } if(position > this.size() -1) { this.append(element); return; } var current = head; for(var i=1; ithis.size() - 1) { throw new Error("Array index exceeds"); } if(position == 0) { head = head.next; } else { var current = head; for(var i=1; i