Linkedlist中的remove,记得要构造fakehead!
1. Remove nth node from the end of list
public class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode fakehead = new ListNode(0);
fakehead.next = head;
ListNode fast = fakehead;
ListNode slow = fakehead;
while (n-- > 0) {
fast = fast.next;
}
while (fast.next!=null) {
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next;
return fakehead.next;
}
}
2. remove duplicates from sorted list I
public class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null) return head;
ListNode pre = head;
ListNode cur = head.next;
while (cur != null) {
if (pre.val == cur.val) {
cur = cur.next;
} else {
pre.next = cur;
pre = cur;
cur = cur.next;
}
}
pre.next = null;
return head;
}
}
3, remove duplicates from sorted list II
public class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null) return head;
ListNode fakehead = new ListNode(0);
fakehead.next = head;
ListNode node = fakehead;
while (node.next != null && node.next.next != null) {
if (node.next.val == node.next.next.val) {
ListNode temp = node.next.next;
while (temp.next != null && temp.next.val == temp.val) {
temp = temp.next;
}
node.next = temp.next;
} else {
node = node.next;
}
}
return fakehead.next;
}
}