您现在的位置:首页 >> 前端 >> 内容

单链表练习去重

时间:2017/10/8 10:14:00 点击:

  核心提示:在进行单链表去重之前,我们先来考虑一下,数组如何就地去重。我们可以很容易的编写出这样的代码:如果通过正向遍历来删除的话,就要注意控制遍历的长度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; i this.size() - 1) {
			throw new Error("Array index exceeds");
		}

		if(position == 0) {
			head = head.next;
		} else {
			var current = head;
			for(var i=1; i

作者:网络 来源:qq_2105839