Course 5: Linked List
- Remove duplicates from sorted list
- Remove duplicates from sorted list II
- Reverse link ed list
- Reverse linked list II
- Merge two sorted list
- Partition list
- Sort list
- Reorder list (注意最后要变成null)
- Remove Nth node from end of list
- Linked list cycle
- Linked list cycle II
- Merge k sorted list
- Copy list with random pointer
- Convert sorted list to binary search tree -O(n)
注意:
- 开始需要判断head==null, head.next==null
- dummy node
- Basic skills
- Insert a node in sorted list
- Remove a node from linked list
public class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null) {
re turn null;
}
ListNode node = head;
while (node.next != null) {
if (node.val == node.next.val) {
node.next = node.next.next;
} else {
node = node.next;
}
}
return head;
}
}
3. Reverse a linked list
public ListNode reverse(ListNode head) {
ListNode prev = null;
while (head != null) {
ListNode temp = head.next;
head.next = prev;
prev = head;
head = temp;
}
return prev;
}
4. Merger two linked lists
private ListNode merge(ListNode head1, ListNode head2) {
ListNode dummy = new ListNode(0);
ListNode tail = dummy;
while (head1 != null && head2 != null) {
if (head1.val < head2.val) {
tail.next = head1;
head1 = head1.next;
} else {
tail.next = head2;
head2 = head2.next;
}
tail = tail.next;
}
if (head1 != null) {
tail.next = head1;
} else {
tail.next = head2;
}
return dummy.next;
}
5. Find the middle of a linked list
private ListNode findMiddle(ListNode head) {
ListNode slow = head, fast = head.next;
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
4.