移动所有球到每个盒子所需的最小操作数 两数相加 删除链表的倒数第 N 个结点 合并K个升序链表 两两交换链表中的节点

1769. 移动所有球到每个盒子所需的最小操作数

左右开工
while(left < ans.length) {
int cur = 0;
for(int i = left; i < ans.length; i++) {左向右
if(s[i] == '1') {
cur += i - left;
}
}
for(int i = left; i >= 0; i--) {右向左
if(s[i] == '1') {
cur += left - i;
}
}
ans[left] = cur;
left++;
}


2. 两数相加

ListNode root = new ListNode(0);
ListNode head = root;
int carry = 0;
while(l1 != null || l2 != null || carry != 0) {很妙
int l1Val = l1 != null ? l1.val : 0;
int l2Val = l2 != null ? l2.val : 0;
int sum = l1Val + l2Val + carry;
carry = sum / 10;注意细节
ListNode cur = new ListNode(sum % 10);
head.next = cur;
head = head.next;
if(l1 != null) l1 = l1.next;
if(l2 != null) l2 = l2.next;
}
return root.next;


19. 删除链表的倒数第 N 个结点

求一下链表长度,直接移动到要跳过的点的前方即可


23. 合并K个升序链表

关键就一个更新迭代
if(a == null || b == null) {注意跳出条件
return a != null ? a : b;
}


24. 两两交换链表中的节点

ListNode pre = new ListNode(0, head);
ListNode root = pre;
while(root.next != null && root.next.next != null) {注意判断和提出变量不要弄混
ListNode star = root.next;
ListNode end = root.next.next;
root.next = end;
star.next = end.next;
end.next = star;
root = star;
}
return pre.next;

posted on 2022-12-02 15:16  xtdnn  阅读(22)  评论(0)    收藏  举报

导航