1.替换空格
实现一个函数,把字符串s中的每一个空格替换成“%20”
解法:调用String中的replace和replaceAll方法都可以完成
s=s.replace(" ","%20");//replace方法的两个输入参数都是字符串
s=s.replaceAll("\\s","%20");//replaceAll方法采用的正则表达式匹配方法
2.调整数组顺序
给定一个数组a,调整该数组中数字的顺序,使得所有奇数位于数组的前部分
解法:新建一个数组,分别从两端开始存放判断后的数
int length=a.length;//尾端索引
int n=0;//前端索引
int []end=new int[length];//结果数组
for(int i=0;i<a.length;i++)
{
if(a[i]%2!=0)
end[n++]=a[i]
else end[--length]=a[i];
}
return end;
3.链表中倒数第k个节点
给定一个链表head,输出该链表的倒数第k个节点,本题从1开始计数,倒数第一个节点就是尾节点
解法:我们通过计算得知,链表的倒数第k个节点其实就是第length-k+1个节点,所以我们只需要计算出链表的长度,然后遍历到length-k+1即可。
ListNode end=head;
int length=1;
while(head.next!=null)//计算链表长度
{
length++;
head=head.next;
}
//遍历第k个节点
for(int i=0;i<length-k;i++)
{
end=end.next;
}
return end;
4.反转链表(就是它所有的next指向反转)
给出一个链表的头节点,反转该链表并输出反转后的头节点
解法:我们可以构建一个数组作为中间量,然后倒序取出放入链表中
首先,我们计算链表的长度
然后通过长度建立一个数组遍历链表存之
然后倒序遍历取之,放入目标链表中
if(head==null) return null;
if(head.next==null) return head;
int length=1;
ListNode help=head;
ListNode end=head;
//计算链表长度
while(head.next!=null)
{
length++;
head=head.next;
}
int []temp=new int[length];//创建中间数组
//遍历链表赋值数组
for(int i=0;i<length;i++){
temp[i]=help.val;
help=help.next;
}
//倒序遍历数组赋值链表
end.val=help[length-1];
head=end;
for(int j=length-2;j>=0;j--){
end=end.next;
end.val=temp[j];
}
return head;//返回头节点