class Solution(object):
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head:
return None
dup = False
dummy = ListNode(0)
dummy.next = head
prev = dummy
curr = head
while curr and curr.next:
if curr.val == curr.next.val:
prev.next = curr.next
curr = curr.next
dup = True
elif curr.val != curr.next.val and dup:
prev.next = curr.next
curr = curr.next
dup = False
else:
prev = curr
curr = curr.next
if dup:
prev.next = prev.next.next
return dummy.next class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode prev = dummy;
ListNode curr = head;
boolean dup = false;
while (curr != null && curr.next != null) {
if (curr.val == curr.next.val) {
// 如果相等,则去掉curr,设dup为true
prev.next = curr.next;
curr = curr.next;
dup = true;
} else if (curr.val != curr.next.val && dup) {
// dup为true,说明一段重复到这里结束,抛弃curr, 设dup为false
prev.next = curr.next;
curr = curr.next;
dup = false;
} else {
curr = curr.next;
prev = prev.next;
}
}
if (dup) prev.next = prev.next.next;
return dummy.next;
}
} class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode dummy = new ListNode(0);
dummy.next = head;
boolean dup = false;
ListNode prev = dummy;
ListNode curr = dummy.next;
while (curr != null) {
// 如果当前curr和next不同,或者curr为null,考虑是否dup
if (curr.next == null || curr.val != curr.next.val) {
if (! dup) {
prev.next = curr;
prev = prev.next;
}
dup = false;
} else {
// 如果当前curr和next重复,设dup为true
dup = true;
}
curr = curr.next;
}
// 因为每次prev相当于是我们结果list的最后一个node,所以需要手动将prev最终的next设为null
prev.next = null;
return dummy.next;
}
} class Solution:
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
dummy = ListNode(0)
dummy.next = head
prev = dummy
curr = head
dup = False
while curr:
if not curr.next or curr.val != curr.next.val:
if not dup:
prev.next = curr
prev = prev.next
dup = False
else:
dup = True
curr = curr.next
prev.next = None
return dummy.next