Day03_剑指Offer
Day03_剑指Offer
今天题目较为简单,但是有道题复制链表,真的折磨,希望我能搞懂,并在每天可以复现出来。冲冲冲
package com.sorrymaker.day2703;
import java.util.HashMap;
import java.util.Map;
/**
* 完整的复制链表,包括引用指向,都要复制。
* @Author nextGame
* @Date 2021/8/14 10:49
* @Version 1.0
*/
public class CopyRandomList {
public class Node {
int val;
Node next;
Node random;
public Node(int val) {
this.val = val;
this.next = null;
this.random = null;
}
}
public Node copyRandomList(Node head) {
//若头节点head 为空, 返回null
// 意思是链表是个空的,那就直接复制一个空的就行了。
if (head == null) {
return null;
}
//节点cur指向头节点
Node cur = head;
//初始化,定义一个maop存储键值对映射关系,
Map<Node, Node> map = new HashMap<>();
// 3. 复制各节点,并建立 “原节点 -> 新节点” 的 Map 映射
while (cur != null) {
map.put(cur, new Node(cur.val));
cur = cur.next;
}
// 将 cur 指针重置为 head 头结点进行遍历
cur = head;
// 4. 构建新链表的 next 和 random 指向
while (cur != null) {
//遍历每个旧节点
map.get(cur).next = map.get(cur.next);
//获得random关系。
map.get(cur).random = map.get(cur.random);
cur = cur.next;
}
// 5. 返回新链表的头节点
//头节点:返回了头节点,就等于返回了整条链表。
return map.get(head);
}
}
package com.sorrymaker.day2703;
/**
* 替换掉字符串的空格为%20
* 直接 return s.replace(" ");
* @Author nextGame
* @Date 2021/8/14 15:02
* @Version 1.0
*/
public class ReplaceSpace {
public String replaceSpace(String s) {
StringBuffer str = new StringBuffer();
for(Character c:s.toCharArray()){
if(c==' '){
str.append("%20");
}else {
str.append(c);
}
}
return str.toString();
}
}
package com.sorrymaker.day2703;
/**
* 即: 切割字符串,把前面的加到后面去。
* 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。
* 请定义一个函数实现字符串左旋转操作的功能。
* 比如,输入字符串"abcdefg"和数字2,
* 该函数将返回左旋转两位得到的结果"cdefgab"。
* @Author nextGame
* @Date 2021/8/14 15:11
* @Version 1.0
*/
public class ReverseLeftWords {
public String reverseLeftWords(String s, int n) {
return s.substring(n,s.length())+s.substring(0,n);
}
}
/**
* StringBuffer str = new StringBuffer();
* char[] chars = s.toCharArray();
* for (int i = n; i < chars.length; i++) {
* str.append(chars[i]);
* }
* return str.toString();
*/

浙公网安备 33010602011771号