一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天,点击查看活动详情。
18 删除链表的节点
题目:给定单向链表的头指针和一个要删除的节点的值,要求定义一个函数删除该节点。最后返回删除后的链表的头节点。
解题思路
链表删除的题目,思路很简单,先设置一个空的指针指向头节点,之后循环判断符合条件的直接用链表删除的方法删除即可,代码也很简单,如下:
public ListNode deleteNode(ListNode head, int val) {
ListNode headPoint = new ListNode(-1);
headPoint.next = head;
ListNode cur = headPoint;
while(cur.next!=null){
if(cur.next.val == val) {
cur.next = cur.next.next;
}else{
cur = cur.next;
}
}
return headPoint.next;
}
20 表示数值的字符串
要求实现一个函数来判断字符串是否可以表示为数值(包括小数和整数)。
一共有以下几种情况:
数值(按顺序)可以分成以下几个部分:
- 若干空格,如( 5)。
- 一个 小数 或者 整数
- (可选)一个
e或E,后面跟着一个 整数
小数(按顺序)可以分成下面的几个部分:
- (可选)一个符号字符(
+或-) - 以及满足下面格式的字符:
- 至少包含一位数字,后面跟着一个点
. - 至少包含一位数字,后面跟着一个点
.,并且后面需要再跟着至少一位数字 - 包含一个点
.,后面跟着至少一位数字
- 至少包含一位数字,后面跟着一个点
整数(按顺序)可以分成以下几个部分:
- (可选)一个符号字符(
+或-) - 至少一位数字
解题思路
本题的关键点在于将所有符合情况的点摸清,按照此方式编码即可,所有的情况为:
.出现正确情况:只出现一次,并且在e的前面e出现正确情况:只出现一次,并且在数字后面出现+或-出现正确情况:只能在首位出现或者在e后面一位出现
编码如下:
public boolean isNumber(String s) {
if (s == null || s.length() == 0) return false;
s = s.trim();
boolean numFlag = false;
boolean dotFlag = false;
boolean eFlag = false;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) >= '0' && s.charAt(i) <= '9') {
numFlag = true;
} else if (s.charAt(i) == '.' && !dotFlag && !eFlag) {
dotFlag = true;
} else if ((s.charAt(i) == 'e' || s.charAt(i) == 'E') && !eFlag && numFlag) {
eFlag = true;
numFlag = false;
} else if ((s.charAt(i) == '+' || s.charAt(i) == '-') && (i == 0 || s.charAt(i - 1) == 'e' || s.charAt(i - 1) == 'E')) {
} else {
return false;
}
}
return numFlag;
}