【发布时间】:2016-02-16 09:30:13
【问题描述】:
我正在尝试对链表进行分区,但当没有任何元素小于您正在查看的当前值时,它似乎无法正常工作。这个想法是基于 val 的,小于参数值的项目在链表中向左移动,大于参数值的项目向右移动。我更改了一些添加到“greaterThan”和“lessThan”链表的条件,但是如果项目在中间,它将停止工作。我错过了什么?一直坚持这一点。这里最相关的功能是“分区”功能,其他都是辅助功能。
var LinkedList = function () {
this.head = null;
this.tail = null;
};
LinkedList.prototype.makeNode = function (val) {
var node = {};
node.val = val;
node.next = null;
return node;
};
LinkedList.prototype.partition = function (val) {
var lesserThanVal = new LinkedList();
var greaterThanVal = new LinkedList();
var iterator = this.head;
while (iterator) {
if (iterator.val < val) {
lesserThanVal.addToTail(iterator.val);
} else if (iterator.val >= val) {
greaterThanVal.addToTail(iterator.val);
}
iterator = iterator.next;
}
//now merge them.
if (lesserThanVal.head === null) {
console.log("LESSER IS NULL")
return greaterThanVal;
}
if (greaterThanVal.head === null) {
console.log("GREATER IS NULL")
return lesserThanVal;
} else {
//merge
var pointer = lesserThanVal.head;
while (pointer.next) {
pointer = pointer.next;
}
pointer.next = greaterThanVal.head;
lesserThanVal.tail = greaterThanVal.tail;
console.log("SHOULD BE 9", lesserThanVal.head.next.next);
return lesserThanVal;
}
};
LinkedList.prototype.addToTail = function (value) {
var newTail = this.makeNode(value);
if (!this.head) {
this.head = newTail;
}
if (this.tail) {
this.tail.next = newTail;
}
this.tail = newTail;
};
测试:
var list = new LinkedList();
list.addToTail(8);
list.addToTail(4);
list.addToTail(5);
list.addToTail(9);
console.log(list);
var partitionedList = list.partition(8);
returns { head: { val: 4, next: { val: 5, next: [8...] } },
tail: { val: 9, next: null } }
var partitionedList = list.partition(4);
returns { head: { val: 8, next: { val: 4, next: [5...] } },
tail: { val: 9, next: null } }
var partitionedList = list.partition(9);
returns { head: { val: 8, next: { val: 4, next: [{5...}] } },
tail: { val: 9, next: null } }
var partitionedList = list.partition(5);
returns { head: { val: 4, next: { val: 8, next: [{5....}] } },
tail: { val: 9, next: null } }
console.log(partitionedList);
【问题讨论】:
-
谢谢,现在就这样做
-
测试你的小提琴,我找不到任何问题。您能否包含预期输出和控制台输出的示例?
-
是的,我提供了在 JS fiddle 的底部,见 cmets:jsfiddle.net/e76vcwtp/1
-
所有提供的例子都是正确的。我仍然不确定你的问题是什么。
-
第二个和第四个例子不正确。在第二个例子中 4 应该在最开始,因为你正在分区,所有大于它的东西都向右
标签: javascript algorithm data-structures linked-list