数据结构关联列表 - 如何创建头键值对?

时间:2016-07-19 15:51:17

标签: javascript data-structures singly-linked-list

我有一个关于数据结构关联列表/单链接列表的问题,它只会添加到头部。 set函数假设设置(多个)键值对,get函数应该得到那些对 - 我不明白如何制作头部(首先假设为null) 成为一个对象,因为新创建的节点成为'新'头 - 我不明白我怎么能用它的键值对'移动''旧'头部。 任何帮助都很高兴!谢谢!

这是我的代码(不多但不知道如何从这里开始)

function List () {
 this.head=null;
}

function ListN (key, value, next) {
  this.key = key;
  this.value = value;
  this.next = next;
}
Alist.prototype.set = function (key, value) {
  // this.key=value;
  var newNode=new ListN(key, value);
  this.head=newNode;
};

Alist.prototype.get = function (key) {
  return this.key;
};

smallList = new List();

2 个答案:

答案 0 :(得分:1)

你快到了。您错过了新ListN调用中的上一个节点。

var newNode = new ListN(key, value, this.head);
//                                  ^^^^^^^^^

function List() {
    this.head = null;
}

List.prototype.set = function (key, value) {

    function ListN(key, value, next) {
        this.key = key;
        this.value = value;
        this.next = next;
    }

    var node = this.head;
    while (node) {
        if (node.key === key) {
            node.value = value;
            return;
        }
        node = node.next;
    }
    this.head = new ListN(key, value, this.head);
};

List.prototype.get = function (key) {
    var node = this.head;
    while (node) {
        if (node.key === key) {
            return node.value;
        }
        node = node.next;
    }
};

var smallList = new List();

smallList.set('one', 'abc');
console.log(smallList);
smallList.set('two', 'def');
console.log(smallList);

console.log(smallList.get('one'));
console.log(smallList.get('two'));
console.log(smallList.get('three')); 

smallList.set('two', 'xyz');
console.log(smallList);

答案 1 :(得分:0)

在一个键值对象中,你应该总是有一个键,所以使用KISS原则:

var object = {};

object['aKey'] = 'some value';
object['otherKey] = 'other value';

如果您想要存储对象,请使用数组:

var myArray = [];

myArrray.push({'key': 'value'});
myArrray.push({'key': 'value'});
myArrray.push({'key1': 'value1'});

如果你想要一个键的很多值:

var object = {};

if(!object.hasOwnProperty('aKey')){
  object['aKey'] = [];
}

object['aKey'].push('value');

Javascript很简单,所以请保持简单:)