# 题目
已知节点结构 Node:
function Node(val) {
this.val = val;
this.next = null;
}
给定链表n1(见测试用例)
并以升序排序
# 测试用例
var n1 = new Node(3);
var n2 = new Node(2);
var n3 = new Node(5);
n1.next = n2;
n2.next = n3;
# 代码
/**
* 升序排列链表
* @param list
* @returns {*}
*/
function anotherMerge(list) {
// 返回结果
var result = list;
// 记录当前比较的节点
var compare = null;
if (result) {
compare = result.next;
result.next = null;
}
// 循环未排序链表
while (compare) {
// 缓存下个节点
var tmp = compare.next;
var current = result;
var before = null;
// 循环已排序链表
while(current) {
if (current.val < compare.val) {
// 到达已排序链表尾部,将比较节点放在结尾
if (!current.next) {
current.next = compare;
compare.next = null;
break;
}
} else {
// 当前比较节点小于链表头
if (before === null) {
compare.next = result;
result = compare;
break;
} else {
// 插入指定位置
before.next = compare;
before.next.next = current;
break;
}
}
before = current;
current = current.next;
}
compare = tmp;
}
return result;
}
# 验证
anotherMerge(n1);