function replaceSpace(str)
{
return str.replace(/\s/g,'%20')
}
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
刷到这道题的时候,顺便复习了一下单链表,以下是单链表的代码
//单链表
function SingLinkedList() {
//定义节点函数,一个节点由数据域和指针域组成
function node(data) {
this.data = data;
this.next = null;
}
var head = null,length=0;
//添加,这里是在尾部添加,所以只要让原有的单链表的最后一个节点的next指向新的节点就可以了,最后将单链表的长度加一
this.append=function(value){
var newnode = new node(value);
if(head==null){
head = newnode;
}else{
var temp=head;
while(temp.next!=null){
temp=temp.next;
}
temp.next = newnode;
}
length++;
return true;
}
//插入,这里是指点的位置插入,先判断要插入的位置是否合理,如果合理的话,先判断是不是插在第一个位置,如果是的话,
//就将新节点的next指向原有链表的第一个节点,然后head指向新节点,如果不是插在第一个位置,则将要插入的位置的前后两个节点找出来,然后先
//将新节点的next指向后一个节点,然后前一个节点的next指向新节点,插入成功之后,单链表的长度加一
this.insert = function(value, pos) {
if(pos >= 0 && pos < length) {
var newnode = new node(value);
var temp = head; //定义一个临时变量
var p,j=0,v;
if(pos==0){
newnode.next=temp;
head=newnode;
}else{
while(j++<pos){
p=temp;
temp=temp.next;
}
newnode.next=temp;
p.next=newnode;
}
length++;
return true;
}else{
return false;
}
}
//删除,先判断要删除的位置是否存在,再判断删除的是不是第一个,如果是,则将原链表的第一个节点的next指向下一个节点,
//然后head等于下一个节点,如果不是第一个节点,就找到要删除的节点的前一个节点,然后将该节点的next指向下一个的下一个,删除成功后,链表的长度减一
this.del=function(pos){
if(pos>=0&pos<length){
var temp=head,j=0,p;
if(pos==0){
head=temp.next;
}else{
while(j++<pos){
p=temp;
temp=temp.next;
}
p.next=temp.next;
}
length--;
return true;
}else{
return false
}
}
//寻找,先判断链表是否存在值,如果存在就一直循环,直到找到该节点
this.find=function(value){
var temp=head;
if(temp==null){
return false;
}else{
while(temp!=null){
if(temp.data==value){
return temp;
}else{
temp=temp.next;
}
}
}
}
//遍历,判断节点是否为空,如果为空则结束遍历
this.print=function(){
var temp = head;
while(temp!=null){
console.log(temp.data);
temp=temp.next;
}
}
}
题目的答案:
function printListFromTailToHead(head)
{
var array=[];
var p = head
while(p!=null){
array.push(p.val)
p=p.next
}
return array.reverse()
}