给定一个排序链表,删除所有重复的元素每个元素只留下一个。
2017-03-29 19:50
796 查看
问题描述:给定一个排序链表,删除所有重复的元素每个元素只留下一个。
样例:
给出
给出
现重复,不将该元素添加到新链表中。
样例:
给出
1->1->2->null,返回
1->2->null。
给出
1->1->2->3->3->null,返回
1->2->3->null。
解题思路:定义俩个标记数组,初始化两个数组为0,若链表中出现一个元素,用标记数组的下标标记该元素在
链表中出现了几次,若其下标为1,则该元素只出现了一次,将该元素添加到新的链表中,若下标不为1,则出
现重复,不将该元素添加到新链表中。
实验代码:
class Solution { public: /** * @param head: The first node of linked list. * @return: head node */ ListNode *deleteDuplicates(ListNode *head) { // write your code here int xing[1000005],jiu[1000005]; memset(xing,0,sizeof(xing)); memset(jiu,0,sizeof(jiu)); ListNode *q,*p; p= new ListNode; q=p; int j=0; while(head!=NULL) { int k; k=0; if(head->val>=0) { xing[head->val]++;k=1; } else { jiu[-(head->val)]++;k=-1; } if(k==1&&xing[head->val]==1) { p->next=head; p=head; } if(k==-1&&jiu[-(head->val)]==1) { p->next=head; p=head; } head=head->next; } if(p!=NULL) p->next=NULL; if(q==NULL) return q; else return q->next; } };
个人感想:链表中元素可能为正也可能为负,需要两个标记数组分别记录正数和负数。
相关文章推荐
- 给定一个排序的链表,删除所有具有重复数字的节点,从原始列表中只留下不同的数字。
- 给定一个排序数组,删除重复的位置,使每个元素只出现一次,并返回新的长度。
- 给定一个排序的链接列表,删除所有重复项,使每个元素只显示一次。
- 给定一个只包含小写字母的字符串,删除重复的字母,每个字母只出现一次。在所有结果中,输出字典顺序最小的。
- 删除数组中重复出现的元素,只留下一个,排序后输出
- 定义一个字符串类DelSameStr,从左到右对字符串中每个字符删除其后所有相同的字符,只留下第一次出现的那一个。例如,若字符串为”cocoon”,删除重复出现的字符后,其结果是字符串”con”
- 算法22:给定一个排好序的linked list,删除其中所有的重复元素。比如给定1->2->3->3-> 4->4->5,返回1->2->5。给定1->1->1->2->3,返回2->3
- 链表逆转以及删除所有重复元素
- 【LeetCode-面试算法经典-Java实现】【082-Remove Duplicates from Sorted List II(排序链表中删除重复元素II)】
- LintCode_112_删除排序链表中重复的元素
- leetcode(83)—— 删除已排序链表重复元素(Remove Duplicates from Sorted List)
- 删除排序链表中的重复元素
- LintCode-删除排序链表中的重复元素
- 无序链表合并为一个有序链表,且排序后链表中无重复元素
- 链表——删除排序链表的重复结点(一个都不保留)
- 删除排序链表中重复元素
- lintcode 容易题:Remove Duplicates from Sorted List 删除排序链表中的重复元素
- 面试题:给定一个长度为N的数组,其中每个元素的取值范围都是1到N。判断数组中是否有重复的数字
- LintCode-剑指Offer-(112)删除排序链表中的重复元素
- LintCode-删除排序链表中的重复元素