给定一个排序的链接列表,删除所有重复项,使每个元素只显示一次。
2017-10-21 11:16
246 查看
本题源自leetcode
---------------------------------------------------------------------------------
思路一 :创建头结点。
ListNode *deleteDuplicates(ListNode *head) {
if(head==NULL||head->next==NULL)
return head;
ListNode* root=new ListNode(head->val-1);
ListNode* pre=root;
root->next=head;
ListNode* p=head;
while(p&&p->next){
if(p->next->val!=p->val){
pre=p;
}else{
ListNode* q=p;
while(p->next&&p->val==p->next->val){
p=p->next;
}
q->next=p->next;
pre=q;
}
p=p->next;
}
return root->next;
}
思路二:不用创建头结点,
ListNode *deleteDuplicates(ListNode *head) {
if(head==NULL||head->next==NULL)
return head;
ListNode* p=head;
while(p){
while(p->next&&p->val==p->next->val){
ListNode* q=p->next;
p->next=q->next;
delete q;
}
p=p->next;
}
return head;
}
---------------------------------------------------------------------------------
思路一 :创建头结点。
ListNode *deleteDuplicates(ListNode *head) {
if(head==NULL||head->next==NULL)
return head;
ListNode* root=new ListNode(head->val-1);
ListNode* pre=root;
root->next=head;
ListNode* p=head;
while(p&&p->next){
if(p->next->val!=p->val){
pre=p;
}else{
ListNode* q=p;
while(p->next&&p->val==p->next->val){
p=p->next;
}
q->next=p->next;
pre=q;
}
p=p->next;
}
return root->next;
}
思路二:不用创建头结点,
ListNode *deleteDuplicates(ListNode *head) {
if(head==NULL||head->next==NULL)
return head;
ListNode* p=head;
while(p){
while(p->next&&p->val==p->next->val){
ListNode* q=p->next;
p->next=q->next;
delete q;
}
p=p->next;
}
return head;
}
相关文章推荐
- 给定一个排序链表,删除所有重复的元素每个元素只留下一个。
- 给定一个排序数组,删除重复的位置,使每个元素只出现一次,并返回新的长度。
- 给定一个排序的链表,删除所有具有重复数字的节点,从原始列表中只留下不同的数字。
- 给定一个数组,求数组中所有元素的可能组合(每个元素只出现一次),使其和等于给定数的解决办法
- 给定一个只包含小写字母的字符串,删除重复的字母,每个字母只出现一次。在所有结果中,输出字典顺序最小的。
- 给定一个数组,求数组中所有元素的可能组合(每个元素只出现一次),使其和等于给定数的解决办法
- 给定整数数组,除了一个元素之外,每个元素都会出现两次。 找到那个只出现一次的
- leetcode-82. Remove Duplicates from Sorted List II(删除有序列表中所有重复元素一个不留)
- 已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。 给定一个int数组A,同时给定
- 给定一个整数数组,1≤a [i]≤n(n =数组的大小),一些元素出现两次,其他出现一次 查找在该数组中出现两次的所有元素
- 算法22:给定一个排好序的linked list,删除其中所有的重复元素。比如给定1->2->3->3-> 4->4->5,返回1->2->5。给定1->1->1->2->3,返回2->3
- 在一个数组中删除所有的和给定数相等的元素
- 给定整数数组,除了一个元素之外,每个元素都出现三次。 找到那个只出现一次的数
- 给定一个数组arr和一个目标数targrt,删除所有目标值元素,并返回新长度
- 给定一个整数数组,两个数字的返回索引将它们加到一个特定的目标中。 您可以假设每个输入都只有一个解决方案,并且您可能不会两次使用相同的元素。
- 给你一个字符串s和一个长度相同的单词列表。 找出s中所有子字符串的起始索引,这些字符串中的每个单词只是一个字符串,没有任何中介字符。
- 用命令或批处理命令一次删除windows系统一个目录下的所有文件
- 给定两个已经排序好的数组,找到两者所有元素中第 k 大的元素
- 给定一个整型数组,求数组元素大于等于所有元素平均值的元素个数
- 一个 ArrayList 对象 aList 中存有若干个字符串元素,现欲遍历该 ArrayList 对象,删除其中 所有值为"abc"的字符串元素,请用代码实现。