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
.
1:特殊情况,空链表和只有一个节点;2:设置startNode和endNode两个节点;当两个节点的val值不等的时候,若两者前后,则startNode只有一个,进行处理;若两者不前后,则说明两者中间右多余的节点;3:最后考虑startNode的情况以及根据index的值来处理next指针。
ListNode *deleteDuplicates(ListNode *head)
{
if(head == NULL || head->next == NULL)
{
return head;
}
ListNode* newHead = NULL;
ListNode* index = NULL;
ListNode* startNode = head;
ListNode* endNode = head->next;
while(endNode)
{
if(endNode->val == startNode->val)
{
endNode = endNode->next;
}
else
{
if(startNode->next == endNode)
{
if(newHead == NULL)
{
newHead = startNode;
index = startNode;
}
else
{
index->next = startNode;
index = index->next;
}
}
startNode = endNode;
endNode = endNode->next;
}
}
if(startNode->next == NULL)
{
if(newHead == NULL)
{
newHead = startNode;
}
else
{
index->next = startNode;
index = index->next;
}
}
else
{
if(index)
{
index->next = NULL;
}
}
return newHead;
}