首页 > 代码库 > [LeetCode]82. Remove Duplicates from Sorted List II
[LeetCode]82. Remove Duplicates from Sorted List II
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
.
删除排序链表中的重复数据。与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. Remove Duplicates from Sorted List II
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。