给你一个链表的头节点 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 输出:[]
package shuati0426;
public class removeElements {
public static void main(String[] args) {
// 创建
//链表节点
ListNode n5=new ListNode(-5);
ListNode n4=new ListNode(2,n5);
ListNode node3 = new ListNode(3,n4);
ListNode node2 = new ListNode(2, node3);
ListNode heada = new ListNode(1, node2);
// 打印链表以验证
printList(heada);
Solution s1=new Solution();
ListNode aa= s1.JremoveElements(heada,2);
printList(aa);
System.out.println(aa);
}
// 方法:打印链表
static void printList(ListNode node) {
while (node != null) {
System.out.print(node.val + " -> ");
node = node.next;
}
System.out.println("null");
}
}
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 int getVal() {
return val;
}
}
class Solution {
public ListNode JremoveElements(ListNode head, int val) {
if (head == null) {
return head;
}
// 因为删除可能涉及到头节点,所以设置dummy节点,统一操作
ListNode dummy = new ListNode(-1, head);
ListNode pre = dummy;
ListNode cur = head;
System.out.println("dummy "+dummy.getVal()+" pre "+pre.getVal()+" head "+head.getVal());
while (cur != null) {
if (cur.val == val) {//head
pre.next = cur.next; //head=head+1
} else {
pre = cur;
}
cur = cur.next; //cur=head+1
if (cur != null) {
System.out.println("pre " + pre.getVal() + " cur " + cur.getVal());
}
}
return dummy.next;
}
}