从链表中删去总和值为零的连续节点
力扣
public ListNode removeZeroSumSublists(ListNode head) {
ListNode dummy = new ListNode(0);
dummy.next = head;
Map<Integer, ListNode> map = new HashMap<>();
// 首次遍历建立 节点处链表和<->节点 哈希表
// 若同一和出现多次会覆盖,即记录该sum出现的最后一次节点
int sum = 0;
for (ListNode d = dummy; d != null; d = d.next) {
sum += d.val;
map.put(sum, d);
}
// 第二遍遍历 若当前节点处sum在下一处出现了则表明两结点之间所有节点和为0 直接删除区间所有节点
sum = 0;
for (ListNode d = dummy; d != null; d = d.next) {
sum += d.val;
d.next = map.get(sum).next;
}
return dummy.next;
}
?移除重复节点
力扣
public ListNode removeDuplicateNodes(ListNode head) {
if(head == null){
return null;
}
Set<Integer> map = new HashSet<>();
ListNode cur = head;
map.add(head.val);
while(cur.next != null){
int val = cur.next.val;
ListNode prev = cur.next;
if(map.add(val)){
cur = cur.next;
}else{
cur.next = cur.next.next;
}
}
return head;
}
|