题目:
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given 1->2->3->3->4->4->5
, return 1->2->5
.
Given 1->1->1->2->3
, return 2->3
.
AC:
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (null == head || null == head.next) {
return head;
}
ListNode dummyNode = new ListNode(-1);
ListNode singleNode = dummyNode;
ListNode currentNode = head;
dummyNode.next = head;
boolean dupFlag = false;
while (null != currentNode && null != currentNode.next) {
if (currentNode.val != currentNode.next.val) {
if (false == dupFlag) {
singleNode.next = currentNode;
singleNode = singleNode.next;
}
else {
dupFlag = false;
}
}
else {
dupFlag = true;
}
currentNode = currentNode.next;
}
if (false == dupFlag) {
singleNode.next = currentNode;
}
else {
singleNode.next = null;
}
return dummyNode.next;
}
}
该题和83类似,只是现在重复节点不保留,直接删除,链表内只留下非重复节点,加个标志判定节点是否为重复节点即可,当更新非重复节点时,标志位要重置。