1.实现链表的反转
(function (){
var node3 = {
name:'obj3',
next:null
}
var node2 = {
name:'obj2',
next:obj3
}
var node1 = {
name:'obj1',
next:obj2
}
function print(node){
var p = node;
while(p){
console.log(p.name)
p = p.next;
}
}
function reverse(nodeList){
var pnode=NodeList,
pre=null,//用来储存上一个节点,初始为null
next//用来存放下一个节点
while(pnode){
next=pnode.next//获得下一个节点
pnode.next=pre//当前节点next指向上一个节点
pre=pnode//设置上一个节点为当前节点
pnode=next//设置当前节点为下一个节点
}
return pre
}
print(reverse(node1));
})();
2.(百词斩前端笔试题)给定一组数,其中三个以上的相邻的数用-连接,其余的用空格分隔,例如:
输入:1,2,3,4,6,7,9,10,11
输出:1-4 6 7 9-11
var s='1 2 3 4 6 7 9 10 11'
var find=function(s) {
var arr=s.split(' ')
var str=''//存放结果
var l=arr.length
var c_arr=[]
for(i=0;i<l;i++){
c_arr.push(arr[i])
if(+arr[i]+1!==+arr[i+1]){//这里注意用加号转为数字
if(c_arr.length>=3){
str=str+c_arr[0]+'-'+c_arr[c_arr.length-1]+' '
}else{
str=str+c_arr.join(' ')+' '
}
c_arr=[]
}
}
return str.substr(0,str.length-1)//去掉最后一个空格
}
console.log(find(s))
3.JS实现快速排序算法
var quickSort=function(arr){
function swap(arr,i,j){
[arr[i],arr[j]]=[arr[j],arr[i]]//利用es6新语法
}
function partition(arr,l,r){
var i=l,j=r-1,pivot=arr[r-1]//以最后一个元素为基准
while(i!==j){
arr[i]<=pivot?i++:swap(arr,i,--j)//从左边开始,若小于基准则继续往右,若大于基准则交换i,j,j往左走,继续判断位置
}
swap(arr,j,r-1)//最后将基准放到ij相等的位置
return j//返回基准此时的位置
}
function qsort(arr,l=0,r=arr.length){
if(r-l<=1)return
const m=partition(arr,l,r)//获得基准位置
qsort(arr,l,m)//递归排序
qsort(arr,m+1,r)
}
qsort(arr)
}
var arr=[1,4,-1,6,2,-8]
quickSort(arr)
console.log(arr)