JavaScript 将单向链表的第M和第N位置间的元素顺序翻转

记录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(' ')); //输出结果

}

你可能感兴趣的:(编程题笔记)