c_cpp 给定已排序的链接列表,删除所有具有重复数字的节点,只留下原始列表中的不同数字。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 给定已排序的链接列表,删除所有具有重复数字的节点,只留下原始列表中的不同数字。相关的知识,希望对你有一定的参考价值。
// verion 1, untested
ListNode* remove_duplicates(ListNode *head) {
if(!head || !head->next) return head;
ListNode dummy(0);
dummy.next = head;
ListNode *pre = &dummy, *cur = head;
bool delete_self = false;
while(cur) {
if(delete_self == true) {
ListNode *nxt = cur->next;
delete cur;
pre->next = nxt;
cur = nxt;
delete_self = false;
continue;
}
ListNode *nxt = cur->next;
if(nxt == NULL) return dummy.next;
if(cur->val == next->val) {
ListNode *nnxt = nxt->next;
delete nxt;
delete_self = true;
cur->next = nnxt;
} else {
pre = cur;
cur = cur->next;
}
}
return dummy.next;
}
// version2, better and tested
ListNode* remove_duplicates(ListNode *head) {
if(!head || !head->next) return head;
ListNode dummy(-1);
dummy.next = head;
ListNode *pre = &dummy, *cur = head;
while(cur) {
ListNode *nxt = cur->next;
bool can_delete = false;
while(nxt && cur->val == nxt->val) {
can_delete = true;
cur->next = nxt->next;
delete nxt;
nxt = cur->next;
}
if(can_delete == true) {
pre->next = cur->next;
delete cur;
cur = pre->next;
can_delete = false;
}
else {
pre = cur;
cur = cur->next;
}
}
return dummt.next;
}
以上是关于c_cpp 给定已排序的链接列表,删除所有具有重复数字的节点,只留下原始列表中的不同数字。的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 给定一个已排序的链表,删除所有重复项,使每个元素只出现一次。
c_cpp 从未排序的链接列表中删除重复项
c_cpp 合并两个已排序的链接列表
c_cpp 删除给定位置的链接列表节点
c_cpp 83.从排序列表中删除重复项
c_cpp 合并两个已排序的链接列表,使合并列表的顺序相反