[LeetCode]82.RemoveDuplicatesfromSortedListII
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

目前创新互联已为1000+的企业提供了网站建设、域名、网页空间、网站托管、服务器租用、企业网站设计、莱阳网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
For example,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.
删除排序链表中的重复数据。与83题对比可知,83题要求重复数据保留一个,而此题要求出现重复数据时,删除重复数据的节点,一个不留。故此题与83题类似。
1)如果空链表或一个节点,返回即可。
2)循环条件是链表不为空,此时最后一个节点需处理,当出现最后两个节点值一致时。此时需要逐个删除。
3)当出现当前节点和下一节点值相同时:指向下个节点并删除当前节点。
4)flag作用:当两个节点相同时,我删除当前节点后,flag置为一,标示下个节点是重复值节点,需删除。删除完并将标示置零。
5)否则保留节点。指向下个节点即可。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head)
{
if ( head == NULL || head->next == NULL )
{
return head;
}
struct ListNode **list = &head;
int flag = 0;
while ( *list )
{
if ( (*list)->next != NULL && (*list)->val == (*list)->next->val )
{
flag = 1;
struct ListNode *delete = *list;
(*list) = (*list)->next;
free(delete);
}
else if ( flag == 1 )
{
flag = 0;
struct ListNode *delete = *list;
(*list) = (*list)->next;
free(delete);
}
else
{
list = &(*list)->next;
}
}
return head;
}
网站题目:[LeetCode]82.RemoveDuplicatesfromSortedListII
文章地址:http://jxjierui.cn/article/pecjpg.html


咨询
建站咨询
