记录vivo提前批笔试编程题:
通过JavaScript编程实现 将单向链表的第M和第N位置间的元素顺序翻转,并输出翻转后的链表
例如:
输入:
3 7
1→2→3→4→5→6→7→8→9
输出:
1→2→7→6→5→4→3→8→9
注意:js用数组模拟链表结构,所以输入的第二行用数组表示,如:[1 2 3 4 5 6 7 8 9],输出也用数组表示,如:[1 2 7 6 5 4 3 8 9],代码如下(一种比较笨的方式):
// Welcome to vivo !
function main() {
//请不要更改main函数名字
var args = process.argv.slice(2);
var lineArgs = [];
var charItems = [];
for (var i = 0; i < args.length; i++) {
if (args[i] == '\n') {
lineArgs.push(charItems);
charItems = [];
} else {
charItems.push(parseInt(args[i]));
}
}
if (charItems.length > 0) {
lineArgs.push(charItems);
}
//以上代码为系统取读参数代码,无需理会
//js用数组模拟链表结构
Array.prototype.slice = function(){};//用非数组api的方式实现
Array.prototype.reverse = function(){};//用非数组api的方式实现
// 参数格式,例如:
//lineArgs[0] =[3 5],位置信息;
//lineArgs[1] = [11, 5, 8, 22, 9, 5, 0], 用数组模拟链表
solution(lineArgs[0], lineArgs[1]);
}
//请把代码实现写在solution方程里面
function solution(arr1, arr2) {
var outputArr = []; //用于输出的结果数组
//TODO write your code here
let m = arr1[0];
let n = arr1[1]
let arr = [];
let length = n - m +1;
for(let i = m - 1; i < n; i++){
arr.push(arr2[i]);
}
for(let i=0; i<m-1; i++){
outputArr.push(arr2[i]);
}
for(let i=arr.length-1; i>=0; i--){
outputArr.push(arr[i]);
}
for(let i=n; i<arr2.length; i++){
outputArr.push(arr2[i]);
}
console.log(outputArr.join(' ')); //输出结果
}