替换空格,调整数组顺序使奇数位于偶数前面,找到链表中倒数第k个节点,反转链表

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;//返回头节点

猜你喜欢

转载自blog.csdn.net/c1776167012/article/details/108587579
今日推荐