您的位置:首页 > 其它

lintcode:Remove Duplicates from Sorted List II

2016-04-03 21:04 204 查看
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only
distinct numbers from the original list.

Have you met this question in a real interview?

Example

Given
1->2->3->3->4->4->5
, return
1->2->5
.

Given
1->1->1->2->3
, return
2->3
.

/**
* Definition of ListNode
* class ListNode {
* public:
*     int val;
*     ListNode *next;
*     ListNode(int val) {
*         this->val = val;
*         this->next = NULL;
*     }
* }
*/
class Solution{
public:
/**
* @param head: The first node of linked list.
* @return: head node
*/
ListNode * deleteDuplicates(ListNode *head) {
// write your code here

if (head == NULL)
return head;

ListNode dummyNode(0);
dummyNode.next = head;
ListNode *preNode = &dummyNode;
ListNode *curNode = head;
ListNode *nextNode = head->next;

bool duplicateFound = false;

while (nextNode) {

if (nextNode->val == curNode->val)
{
nextNode = nextNode->next;
duplicateFound = true;
continue;
}

if (!duplicateFound) //根据duplated是否发现需要对preNode进行不同处理
{
preNode = preNode->next;
}
else
{
preNode->next = nextNode;
duplicateFound = false;
}

curNode = nextNode;
nextNode = nextNode->next;
}

if (duplicateFound)
preNode->next = NULL;

return dummyNode.next;

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: