今天更新的链表相关的题目~
- 中等 两数相加 Add Two Numbers
20.07.13
思路:一个carry,然后建表。
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(0);
ListNode curr = dummy;
int carry = 0;
while(l1 != null || l2 != null || carry != 0){
int val1 = l1 == null ? 0 : l1.val;
int val2 = l2 == null ? 0 : l2.val;
int sum = val1 + val2 + carry;
carry = sum / 10;
ListNode sumNode = new ListNode(sum % 10);
curr.next = sumNode;
curr = curr.next;
if(l1 != null) l1 = l1.next;
if(l2 != null) l2 = l2.next;
}
return dummy.next;
}
}
- 简单 合并两个有序链表 Merge Two Sorted Lists
20.07.13
思路:之前想的太复杂了。
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(0);
ListNode curr = dummy;
while(l1 != null && l2 != null){
if(l1.val < l2.val) {
curr.next = l1;
l1 = l1.next;
}else{
curr.next = l2;
l2 = l2.next;
}
curr = curr.next;
}
if(l1 != null){
curr.next = l1;
}else{
curr.next = l2;
}
return dummy.next;
}
}
- 困难 合并K个有序链表 Merge K Sorted Lists
20.07.14
思路:这里是重写了priorityqueue的compare方法,比较有意思。
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
if(lists.length == 0) return null;
ListNode dummyHead = new ListNode(0);
ListNode curr = dummyHead;
PriorityQueue<ListNode> pq = new PriorityQueue<>(new Comparator<ListNode>(){
@Override
public int compare(ListNode o1,ListNode o2){
return o1.val - o2.val;
}
});
for(ListNode list:lists){
if(list == null) continue;
pq.add</