龙岩做网站开发哪家厉害,代理公司注册要提供什么资料,wordpress企业网站主题,商城展示网站1、算法思路
讲一下设置虚拟头节点的那个方法#xff0c;设置一个新节点指向原来链表的头节点#xff0c;这样我们就可以通过判断链表的当前节点的后继节点值是不是目标删除值#xff0c;来判断是否删除这个后继节点了。如果不设置虚拟头节点#xff0c;则需要将头节点和后…1、算法思路
讲一下设置虚拟头节点的那个方法设置一个新节点指向原来链表的头节点这样我们就可以通过判断链表的当前节点的后继节点值是不是目标删除值来判断是否删除这个后继节点了。如果不设置虚拟头节点则需要将头节点和后面的节点分开来讨论代码会复杂一点。
2、Java代码实现
package listnodes;//Definition for singly-linked list.
class ListNode {int val;ListNode next;ListNode() {}ListNode(int val) { this.val val; }ListNode(int val, ListNode next) { this.val val; this.next next; }
}public class RemoveElements {public static void main(String[] args) {//构造链表
// int[] nums new int[]{1,2,6,3,4,5,6};
// int[] nums new int[]{7,7,7,7};int[] nums new int[]{1,2,2,1};ListNode head null;for (int i nums.length - 1; i 0; i--) {ListNode node new ListNode(nums[i]);if(head ! null){node.next head;}head node;}//处理链表Solution sol new Solution();
// ListNode resNode sol.removeElements(head, 6);//[1,2,3,4,5]
// ListNode resNode sol.removeElements(head, 7);//[]ListNode resNode sol.removeElements(head, 2);//[1, 1]//遍历链表并打印StringBuilder sb new StringBuilder([);while(resNode ! null){if(sb.length() ! 1) sb.append(, );sb.append(resNode.val);resNode resNode.next;}sb.append(]);System.out.println(sb);}
}// 递归法
//class Solution {
// public ListNode removeElements(ListNode head, int val) {
// if (head null) {
// return head;
// }
// head.next removeElements(head.next, val);
// return head.val val ? head.next : head;
// }
//}// 头结点是否删除最后再考虑
//class Solution {
// public ListNode removeElements(ListNode head, int val) {
// ListNode pre head;
// while(pre ! null pre.next ! null){
// if(pre.next.val val){
// //跳过当前节点的后一个节点赋值给当前节点的前一个节点的next相当于删除当前节点
// pre.next pre.next.next;
// }else{
// pre pre.next;
// }
// }
// pre head;
// while(pre ! null pre.val val){
// pre pre.next;
// }
// return pre;
// }
//}// 设置一个虚拟头结点这样代码更简单
class Solution {public ListNode removeElements(ListNode head, int val) {ListNode temp new ListNode(0);temp.next head;ListNode pre temp;while(pre.next ! null){if(pre.next.val val){//跳过当前节点的后一个节点赋值给当前节点的前一个节点的next相当于删除当前节点pre.next pre.next.next;}else{pre pre.next;}}return temp.next;}
}3、完整题目
203. 移除链表元素
给你一个链表的头节点 head 和一个整数 val 请你删除链表中所有满足 Node.val val 的节点并返回 新的头节点 。
示例 1 输入head [1,2,6,3,4,5,6], val 6
输出[1,2,3,4,5]示例 2
输入head [], val 1
输出[]示例 3
输入head [7,7,7,7], val 7
输出[]提示
列表中的节点数目在范围 [0, 10^4] 内1 Node.val 500 val 50