剑指offer11-15

11/**
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
**/
function NumberOf1(n){
	if(n<0){
		n=n&0xffffffff;
	}
	var count =0;
	while(n!=0){
		n=n&(n-1);
		count+=1;
	}
	return count;
}
var re = NumberOf1(5);
console.log(re);
12'''
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
'''
function Power(base,exponent){
	if(exponent==0){
		return 1;
	}
	var fu=false;
	if(exponent<0){
		fu=true;
		exponent=-1*exponent;
	}
	var temp = base;
	for(var i=0;i<exponent-1;i++){
		temp=temp*base;
	}
	if(fu){
		temp=1/temp;
	}
	return temp;
}
var re = Power(2,-2);
console.log(re);
13/**'''
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,
所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
'''**/
function reOrderArray(array) {
    var jishu = []
    var oushu = []
    array.forEach(item => {
        if (item % 2 != 0) {
            jishu.push(item);
        } else {
            oushu.push(item);
        }
    })
    jishu=jishu.concat(oushu);
    return jishu
}

var re = reOrderArray([1, 3, 5, 2, 6, 8, 7, 9]);
console.log(re);
14./**
'''
输入一个链表,输出该链表中倒数第k个结点。
'''
**/
class ListNode{
    constructor(x){
        this.val = x;
        this.next = null;
    }
}
function FindKthToTail(head,k){
    let [fast,slow] = [head,head];
    for(let i=0;i<k;i++){
        if(!fast){return null}
        fast = fast.next;
    }
    while(fast){
        fast=fast.next;
        slow=slow.next;
    }
    return slow;
}
let ln1 = new ListNode(1);
ln1.next = new ListNode(2);
ln1.next.next = new ListNode(3);
ln1.next.next.next = new ListNode(4);

var last_k = FindKthToTail(ln1,2);
console.log(last_k)
15./**
'''
输入一个链表,反转链表后,输出新链表的表头。链表反转,两种
'''
**/
class ListNode{
    constructor(x){
        this.val = x;
        this.next = null;
    }
}
function printListFromTailToHead(ListNode){
    if(ListNode == null){
        return []
    }
    return printListFromTailToHead(ListNode.next).concat([ListNode.val]);
}

let List= new ListNode(1);
List.next = new ListNode(2);
List.next.next = new ListNode(3);
List.next.next.next = new ListNode(4);

let newList = printListFromTailToHead(List);
console.log(newList[0]);
class ListNode{
    constructor(x){
        this.val = x;
        this.next = null;
    }
}
function printListFromTailToHead(ListNode){
    if(ListNode==null || ListNode.next == null){
        return ListNode;
    }
    var pre = null;
    var next = null;
    while(ListNode!=null){
        next = ListNode.next;
        ListNode.next = pre;
        pre = ListNode;
        ListNode = next;
    }
    return pre;
}

let List= new ListNode(1);
List.next = new ListNode(2);
List.next.next = new ListNode(3);
List.next.next.next = new ListNode(4);

let newList = printListFromTailToHead(List);
console.log(newList.val);