dw个人网站制作模板,吉林建设集团网站,最专业的网站建设机构,可做百科资料参考的网站给定单向链表的头指针和一个要删除的节点的值#xff0c;定义一个函数删除该节点。
返回删除后的链表的头节点。
注意#xff1a;此题对比原题有改动
示例 1:
输入: head [4,5,1,9], val 5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二个节点#xff0c;那么在调用…给定单向链表的头指针和一个要删除的节点的值定义一个函数删除该节点。
返回删除后的链表的头节点。
注意此题对比原题有改动
示例 1:
输入: head [4,5,1,9], val 5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二个节点那么在调用了你的函数之后该链表应变为 4 - 1 - 9. 示例 2:
输入: head [4,5,1,9], val 1 输出: [4,5,9] 解释: 给定你链表中值为 1 的第三个节点那么在调用了你的函数之后该链表应变为 4 - 5 - 9.
说明
题目保证链表中节点的值互不相同 若使用 C 或 C 语言你不需要 free 或 delete 被删除的节点
思路注意头结点即可制造一个假节点解决问题是常用方法。
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val x; }* }*/
class Solution {public ListNode deleteNode(ListNode head, int val) {ListNode tempnew ListNode(-1);temp.nexthead;for(ListNode itemp;i.next!null;ii.next){if(i.next.valval){i.nexti.next.next;break;}}return temp.next;}
} 请实现一个函数用来匹配包含. 和*的正则表达式。模式中的字符.表示任意一个字符而*表示它前面的字符可以出现任意次含0次。在本题中匹配是指字符串的所有字符匹配整个模式。例如字符串aaa与模式a.a和ab*ac*a匹配但与aa.a和ab*a均不匹配。
示例 1:
输入: s aa p a 输出: false 解释: a 无法匹配 aa 整个字符串。 示例 2:
输入: s aa p a* 输出: true 解释: 因为 * 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 a。因此字符串 aa 可被视为 a 重复了一次。 示例 3:
输入: s ab p .* 输出: true 解释: .* 表示可匹配零个或多个*任意字符.。 示例 4:
输入: s aab p c*a*b 输出: true 解释: 因为 * 表示零个或多个这里 c 为 0 个, a 被重复一次。因此可以匹配字符串 aab。 示例 5:
输入: s mississippi p mis*is*p*. 输出: false s 可能为空且只包含从 a-z 的小写字母。 p 可能为空且只包含从 a-z 的小写字母以及字符 . 和 *。
思路字符串dp注意仔细读题。
class Solution {public boolean isMatch(String s,String p){if (s null || p null)return false;int sLens.length();int pLenp.length();boolean[][] dp new boolean[sLen 1][pLen 1];dp[0][0] true;//dp[i][j] 表示 s 的前 i 个是否能被 p 的前 j 个匹配for (int i 0; i pLen; i) { // heres the ps length, not ssdp[0][i 1] p.charAt(i) * dp[0][i - 1];}for (int i 0; i sLen; i) {for (int j 0; j pLen; j) {//单个字符可以匹配if (p.charAt(j) . || p.charAt(j) s.charAt(i)) dp[i 1][j 1] dp[i][j];//多个字符if (p.charAt(j) *) {dp[i1][j1]dp[i1][j-1] || (dp[i1][j] (s.charAt(i)p.charAt(j-1) || p.charAt(j-1).)) ||(dp[i][j1] (s.charAt(i)p.charAt(j-1) || p.charAt(j-1).));}}}return dp[sLen][pLen];}
} 请实现一个函数用来判断字符串是否表示数值包括整数和小数。例如字符串100、5e2、-123、3.1416、0123及-1E-16都表示数值但12e、1a3.14、1.2.3、-5及12e5.4都不是。
思路1try catch
class Solution {public boolean isNumber(String s) {try {if (s.endsWith(f) || s.endsWith(F)|| s.endsWith(D) || s.endsWith(d)) {return false;}Double.valueOf(s);return true;} catch (Exception exception) {return false;}}
}
思路2正则
class Solution:def isNumber(self, s: str) - bool:return bool(re.match(r *[-]?([0-9](\.[0-9]*)?|\.[0-9])(e[-]?[0-9])? *$, s)) 输入一个整数数组实现一个函数来调整该数组中数字的顺序使得所有奇数位于数组的前半部分所有偶数位于数组的后半部分。 示例
输入nums [1,2,3,4] 输出[1,3,2,4] 注[3,1,2,4] 也是正确的答案之一。
提示
1 nums.length 50000 1 nums[i] 10000
思路和快排一趟partation类似
class Solution {public int[] exchange(int[] nums) {int i 0, j nums.length - 1, tmp;while(i j) {while(i j (nums[i] 1) 1) i;while(i j (nums[j] 1) 0) j--;tmp nums[i];nums[i] nums[j];nums[j] tmp;}return nums;}
}