1,问题简述
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
返回删除后的链表的头节点。
注意:此题对比原题有改动
2,示例
输入: head = [4,5,1,9], val = 5
输出: [4,1,9]
解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
3,题解思路
使用哨兵节点和HashSet集合进行操作。
4,题解程序
import java.util.HashSet;
import java.util.LinkedHashSet;
public class DeleteNodeTest {
public static void main(String[] args) {
ListNode l1 = new ListNode(4);
ListNode l12 = new ListNode(5);
ListNode l13 = new ListNode(1);
ListNode l14 = new ListNode(9);
l1.next = l12;
l12.next = l13;
l13.next = l14;
int val = 5;
ListNode listNode = deleteNode(l1, val);
System.out.println("listNode = " + listNode);
}
public static ListNode deleteNode(ListNode head, int val) {
if (head == null) {
return head;
}
HashSet<Integer> hashSet = new LinkedHashSet<>();
ListNode temp = head;
while (temp != null) {
if (temp.val != val) {
hashSet.add(temp.val);
}
temp = temp.next;
}
ListNode dummyNode = new ListNode(-1);
ListNode tempNode = dummyNode;
for (Integer num : hashSet
) {
tempNode.next = new ListNode(num);
tempNode = tempNode.next;
}
return dummyNode.next;
}
}