feat: 2025-10-27打卡
This commit is contained in:
58
109.convert-sorted-list-to-binary-search-tree.java
Normal file
58
109.convert-sorted-list-to-binary-search-tree.java
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
* @lc app=leetcode id=109 lang=java
|
||||||
|
*
|
||||||
|
* [109] Convert Sorted List to Binary Search Tree
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @lc code=start
|
||||||
|
/**
|
||||||
|
* Definition for singly-linked list.
|
||||||
|
* public class ListNode {
|
||||||
|
* int val;
|
||||||
|
* ListNode next;
|
||||||
|
* ListNode() {}
|
||||||
|
* ListNode(int val) { this.val = val; }
|
||||||
|
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* Definition for a binary tree node.
|
||||||
|
* public class TreeNode {
|
||||||
|
* int val;
|
||||||
|
* TreeNode left;
|
||||||
|
* TreeNode right;
|
||||||
|
* TreeNode() {}
|
||||||
|
* TreeNode(int val) { this.val = val; }
|
||||||
|
* TreeNode(int val, TreeNode left, TreeNode right) {
|
||||||
|
* this.val = val;
|
||||||
|
* this.left = left;
|
||||||
|
* this.right = right;
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
class Solution {
|
||||||
|
public TreeNode sortedListToBST(ListNode head) {
|
||||||
|
return buildTree(head);
|
||||||
|
}
|
||||||
|
|
||||||
|
private TreeNode buildTree(ListNode head) {
|
||||||
|
if(head == null || head.next == null) {
|
||||||
|
return head == null ? null : new TreeNode(head.val, null, null);
|
||||||
|
}
|
||||||
|
ListNode dummy = new ListNode(0);
|
||||||
|
dummy.next = head;
|
||||||
|
ListNode slow = dummy, fast = dummy, prev = dummy;
|
||||||
|
while(fast != null && fast.next != null) {
|
||||||
|
fast = fast.next.next;
|
||||||
|
prev = slow;
|
||||||
|
slow = slow.next;
|
||||||
|
}
|
||||||
|
prev.next = null;
|
||||||
|
TreeNode tree = new TreeNode(slow.val, null, null);
|
||||||
|
tree.left = buildTree(dummy.next);
|
||||||
|
tree.right = buildTree(slow.next);
|
||||||
|
return tree;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// @lc code=end
|
||||||
|
|
||||||
46
138.copy-list-with-random-pointer.java
Normal file
46
138.copy-list-with-random-pointer.java
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* @lc app=leetcode id=138 lang=java
|
||||||
|
*
|
||||||
|
* [138] Copy List with Random Pointer
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @lc code=start
|
||||||
|
/*
|
||||||
|
// Definition for a Node.
|
||||||
|
class Node {
|
||||||
|
int val;
|
||||||
|
Node next;
|
||||||
|
Node random;
|
||||||
|
|
||||||
|
public Node(int val) {
|
||||||
|
this.val = val;
|
||||||
|
this.next = null;
|
||||||
|
this.random = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
public Node copyRandomList(Node head) {
|
||||||
|
if(head == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
Map<Node, Node> ref = new HashMap<>();
|
||||||
|
Node cur = head;
|
||||||
|
while(cur != null) {
|
||||||
|
Node cp = new Node(cur.val);
|
||||||
|
ref.put(cur, cp);
|
||||||
|
cur = cur.next;
|
||||||
|
}
|
||||||
|
cur = head;
|
||||||
|
while(cur != null) {
|
||||||
|
Node nd = ref.get(cur);
|
||||||
|
nd.next = ref.get(cur.next);
|
||||||
|
nd.random = ref.get(cur.random);
|
||||||
|
cur = cur.next;
|
||||||
|
}
|
||||||
|
return ref.get(head);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// @lc code=end
|
||||||
|
|
||||||
63
148.sort-list.java
Normal file
63
148.sort-list.java
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
/*
|
||||||
|
* @lc app=leetcode id=148 lang=java
|
||||||
|
*
|
||||||
|
* [148] Sort List
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @lc code=start
|
||||||
|
/**
|
||||||
|
* Definition for singly-linked list.
|
||||||
|
* public class ListNode {
|
||||||
|
* int val;
|
||||||
|
* ListNode next;
|
||||||
|
* ListNode() {}
|
||||||
|
* ListNode(int val) { this.val = val; }
|
||||||
|
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
class Solution {
|
||||||
|
public ListNode sortList(ListNode head) {
|
||||||
|
if(head == null || head.next == null) {
|
||||||
|
return head;
|
||||||
|
}
|
||||||
|
ListNode slow = head, fast = head, prev = null;
|
||||||
|
while(fast != null && fast.next != null) {
|
||||||
|
fast = fast.next.next;
|
||||||
|
prev = slow;
|
||||||
|
slow = slow.next;
|
||||||
|
}
|
||||||
|
prev.next = null;
|
||||||
|
ListNode l1 = sortList(head);
|
||||||
|
ListNode l2 = sortList(slow);
|
||||||
|
return merge(l1, l2);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ListNode merge(ListNode l1, ListNode l2) {
|
||||||
|
ListNode dummy = new ListNode(0), tail = dummy, tmp;
|
||||||
|
dummy.next = null;
|
||||||
|
while(l1 != null || l2 != null) {
|
||||||
|
if(l1 == null || l2 == null) {
|
||||||
|
if(l1 != null) {
|
||||||
|
tail.next = l1;
|
||||||
|
} else {
|
||||||
|
tail.next = l2;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
if(l1.val <= l2.val) {
|
||||||
|
tmp = l1;
|
||||||
|
l1 = l1.next;
|
||||||
|
} else {
|
||||||
|
tmp = l2;
|
||||||
|
l2 = l2.next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tail.next = tmp;
|
||||||
|
tail = tail.next;
|
||||||
|
tail.next = null;
|
||||||
|
}
|
||||||
|
return dummy.next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// @lc code=end
|
||||||
|
|
||||||
33
237.delete-node-in-a-linked-list.java
Normal file
33
237.delete-node-in-a-linked-list.java
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* @lc app=leetcode id=237 lang=java
|
||||||
|
*
|
||||||
|
* [237] Delete Node in a Linked List
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @lc code=start
|
||||||
|
/**
|
||||||
|
* Definition for singly-linked list.
|
||||||
|
* public class ListNode {
|
||||||
|
* int val;
|
||||||
|
* ListNode next;
|
||||||
|
* ListNode(int x) { val = x; }
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
class Solution {
|
||||||
|
public void deleteNode(ListNode node) {
|
||||||
|
if(node == null || node.next == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ListNode cur = node, prev = null;
|
||||||
|
while(cur!=null && cur.next!=null) {
|
||||||
|
cur.val = cur.next.val;
|
||||||
|
prev = cur;
|
||||||
|
cur = cur.next;
|
||||||
|
}
|
||||||
|
if(prev != null) {
|
||||||
|
prev.next = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// @lc code=end
|
||||||
|
|
||||||
44
328.odd-even-linked-list.java
Normal file
44
328.odd-even-linked-list.java
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* @lc app=leetcode id=328 lang=java
|
||||||
|
*
|
||||||
|
* [328] Odd Even Linked List
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @lc code=start
|
||||||
|
/**
|
||||||
|
* Definition for singly-linked list.
|
||||||
|
* public class ListNode {
|
||||||
|
* int val;
|
||||||
|
* ListNode next;
|
||||||
|
* ListNode() {}
|
||||||
|
* ListNode(int val) { this.val = val; }
|
||||||
|
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
class Solution {
|
||||||
|
public ListNode oddEvenList(ListNode head) {
|
||||||
|
if(head == null || head.next == null) {
|
||||||
|
return head;
|
||||||
|
}
|
||||||
|
ListNode oddDummy = new ListNode(0), oddTail = oddDummy, evenDummy = new ListNode(0), evenTail = evenDummy, cur = head;
|
||||||
|
int i = 1;
|
||||||
|
while(cur != null) {
|
||||||
|
if(i % 2 == 1) {
|
||||||
|
oddTail.next = cur;
|
||||||
|
cur = cur.next;
|
||||||
|
oddTail = oddTail.next;
|
||||||
|
oddTail.next = null;
|
||||||
|
} else {
|
||||||
|
evenTail.next = cur;
|
||||||
|
cur = cur.next;
|
||||||
|
evenTail = evenTail.next;
|
||||||
|
evenTail.next = null;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
oddTail.next = evenDummy.next;
|
||||||
|
return oddDummy.next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// @lc code=end
|
||||||
|
|
||||||
70
445.add-two-numbers-ii.java
Normal file
70
445.add-two-numbers-ii.java
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
* @lc app=leetcode id=445 lang=java
|
||||||
|
*
|
||||||
|
* [445] Add Two Numbers II
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @lc code=start
|
||||||
|
/**
|
||||||
|
* Definition for singly-linked list.
|
||||||
|
* public class ListNode {
|
||||||
|
* int val;
|
||||||
|
* ListNode next;
|
||||||
|
* ListNode() {}
|
||||||
|
* ListNode(int val) { this.val = val; }
|
||||||
|
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
class Solution {
|
||||||
|
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
|
||||||
|
l1 = reverse(l1);
|
||||||
|
l2 = reverse(l2);
|
||||||
|
return reverse(addByLittleEnd(l1, l2));
|
||||||
|
}
|
||||||
|
|
||||||
|
private ListNode addByLittleEnd(ListNode l1, ListNode l2) {
|
||||||
|
ListNode dummy = new ListNode(0), tail = dummy;
|
||||||
|
dummy.next = null;
|
||||||
|
boolean flow = false;
|
||||||
|
while(l1 != null || l2 != null) {
|
||||||
|
int v1 = l1==null?0:l1.val;
|
||||||
|
int v2 = l2==null?0:l2.val;
|
||||||
|
int v = v1 + v2 + (flow?1:0);
|
||||||
|
flow = v>=10;
|
||||||
|
ListNode tmp = new ListNode(v%10, null);
|
||||||
|
tail.next = tmp;
|
||||||
|
tail = tail.next;
|
||||||
|
tail.next = null;
|
||||||
|
if(l1 != null) {
|
||||||
|
l1 = l1.next;
|
||||||
|
}
|
||||||
|
if(l2 != null) {
|
||||||
|
l2 = l2.next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(flow) {
|
||||||
|
ListNode tmp = new ListNode(1, null);
|
||||||
|
tail.next = tmp;
|
||||||
|
tail = tail.next;
|
||||||
|
tail.next = null;
|
||||||
|
}
|
||||||
|
return dummy.next;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ListNode reverse(ListNode l) {
|
||||||
|
if(l == null) {
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
ListNode dummy = new ListNode(0), tmp;
|
||||||
|
dummy.next = null;
|
||||||
|
while(l != null) {
|
||||||
|
tmp = l.next;
|
||||||
|
l.next = dummy.next;
|
||||||
|
dummy.next = l;
|
||||||
|
l = tmp;
|
||||||
|
}
|
||||||
|
return dummy.next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// @lc code=end
|
||||||
|
|
||||||
45
61.rotate-list.java
Normal file
45
61.rotate-list.java
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
* @lc app=leetcode id=61 lang=java
|
||||||
|
*
|
||||||
|
* [61] Rotate List
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @lc code=start
|
||||||
|
/**
|
||||||
|
* Definition for singly-linked list.
|
||||||
|
* public class ListNode {
|
||||||
|
* int val;
|
||||||
|
* ListNode next;
|
||||||
|
* ListNode() {}
|
||||||
|
* ListNode(int val) { this.val = val; }
|
||||||
|
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
class Solution {
|
||||||
|
public ListNode rotateRight(ListNode head, int k) {
|
||||||
|
if(head == null) {
|
||||||
|
return head;
|
||||||
|
}
|
||||||
|
int len = 0;
|
||||||
|
ListNode cur = head;
|
||||||
|
while(cur != null) {
|
||||||
|
len++;
|
||||||
|
if(cur.next == null) {
|
||||||
|
cur.next = head;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
cur = cur.next;
|
||||||
|
}
|
||||||
|
k = k % len;
|
||||||
|
ListNode prev = cur;
|
||||||
|
cur = head;
|
||||||
|
for(int i = 0; i < len - k; i++) {
|
||||||
|
cur = cur.next;
|
||||||
|
prev = prev.next;
|
||||||
|
}
|
||||||
|
prev.next = null;
|
||||||
|
return cur;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// @lc code=end
|
||||||
|
|
||||||
42
82.remove-duplicates-from-sorted-list-ii.java
Normal file
42
82.remove-duplicates-from-sorted-list-ii.java
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* @lc app=leetcode id=82 lang=java
|
||||||
|
*
|
||||||
|
* [82] Remove Duplicates from Sorted List II
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @lc code=start
|
||||||
|
/**
|
||||||
|
* Definition for singly-linked list.
|
||||||
|
* public class ListNode {
|
||||||
|
* int val;
|
||||||
|
* ListNode next;
|
||||||
|
* ListNode() {}
|
||||||
|
* ListNode(int val) { this.val = val; }
|
||||||
|
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
class Solution {
|
||||||
|
public ListNode deleteDuplicates(ListNode head) {
|
||||||
|
ListNode dummy = new ListNode(0);
|
||||||
|
ListNode tail = dummy;
|
||||||
|
dummy.next = null;
|
||||||
|
ListNode cur = head;
|
||||||
|
int v;
|
||||||
|
while(cur != null) {
|
||||||
|
if(cur.next == null || cur.val != cur.next.val) {
|
||||||
|
tail.next = cur;
|
||||||
|
cur = cur.next;
|
||||||
|
tail = tail.next;
|
||||||
|
tail.next = null;
|
||||||
|
} else {
|
||||||
|
v = cur.val;
|
||||||
|
while(cur != null && cur.val == v) {
|
||||||
|
cur = cur.next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dummy.next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// @lc code=end
|
||||||
|
|
||||||
57
838.push-dominoes.java
Normal file
57
838.push-dominoes.java
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* @lc app=leetcode id=838 lang=java
|
||||||
|
*
|
||||||
|
* [838] Push Dominoes
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @lc code=start
|
||||||
|
class Solution {
|
||||||
|
public String pushDominoes(String dominoes) {
|
||||||
|
final int N = dominoes.length();
|
||||||
|
int[] states = new int[dominoes.length()];
|
||||||
|
for(int i = 0; i<dominoes.length(); i++) {
|
||||||
|
if(dominoes.charAt(i) == 'L') {
|
||||||
|
states[i] -= N;
|
||||||
|
int j = i-1;
|
||||||
|
int fluence = N;
|
||||||
|
while(j>=0) {
|
||||||
|
--fluence;
|
||||||
|
states[j] -= fluence;
|
||||||
|
if(dominoes.charAt(j) !='.') {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
j--;
|
||||||
|
}
|
||||||
|
} else if(dominoes.charAt(i) == 'R') {
|
||||||
|
states[i] += N;
|
||||||
|
int j = i+1;
|
||||||
|
int fluence = N;
|
||||||
|
while(j < dominoes.length()) {
|
||||||
|
--fluence;
|
||||||
|
states[j] += fluence;
|
||||||
|
if(dominoes.charAt(j) != '.') {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
for(int i = 0; i<states.length; i++) {
|
||||||
|
if(states[i] < 0) {
|
||||||
|
sb.append('L');
|
||||||
|
} else if(states[i] > 0) {
|
||||||
|
sb.append('R');
|
||||||
|
} else {
|
||||||
|
sb.append('.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// @lc code=end
|
||||||
|
|
||||||
43
86.partition-list.java
Normal file
43
86.partition-list.java
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* @lc app=leetcode id=86 lang=java
|
||||||
|
*
|
||||||
|
* [86] Partition List
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @lc code=start
|
||||||
|
/**
|
||||||
|
* Definition for singly-linked list.
|
||||||
|
* public class ListNode {
|
||||||
|
* int val;
|
||||||
|
* ListNode next;
|
||||||
|
* ListNode() {}
|
||||||
|
* ListNode(int val) { this.val = val; }
|
||||||
|
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
class Solution {
|
||||||
|
public ListNode partition(ListNode head, int x) {
|
||||||
|
ListNode tf = new ListNode(0),
|
||||||
|
tb = new ListNode(0);
|
||||||
|
tf.next = null;
|
||||||
|
tb.next = null;
|
||||||
|
ListNode cur = head, tailf = tf, tailb = tb;
|
||||||
|
while(cur != null) {
|
||||||
|
if(cur.val < x) {
|
||||||
|
tailf.next = cur;
|
||||||
|
cur = cur.next;
|
||||||
|
tailf = tailf.next;
|
||||||
|
tailf.next = null;
|
||||||
|
} else {
|
||||||
|
tailb.next = cur;
|
||||||
|
cur = cur.next;
|
||||||
|
tailb = tailb.next;
|
||||||
|
tailb.next = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tailf.next = tb.next;
|
||||||
|
return tf.next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// @lc code=end
|
||||||
|
|
||||||
Reference in New Issue
Block a user