avatar

目录
83删除排序链表中的重复元素

题目链接

题目描述:

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。

实例:

输入: 1->1->2->3->3
输出: 1->2->3

题解:

  本题比较简单,主要考察移动链表指针操作,使用单个指针移动判重即可。设置当前指针cur,如果cur->val与cur->next->val相等,则说明需要判重,即执行删除指针操作;如果不相等,则cur指针移动到下一个位置。当cur指针或者cur->next为空,说明不需要再进行操作,即循环结束。注意:一,在执行删除指针操作时,可以释放已删除指针,不过经测试(运行结果图就不截了。。。),在leetcode运行时会减慢运行速度,内存消耗几乎没有变化;二,要考虑极端条件,例如输入链表为空或者只有一个结点的情况。

算法

cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(!head || !head->next ){
return head;
}
ListNode* cur = head;

while(cur->next && cur){
if(cur->val == cur->next->val){
//ListNode* temp = cur->next;
cur->next = cur->next->next;
//free(temp);
}
else{
cur = cur->next;
}
}
return head;
}
};

若还有疑问可以去英文版leetcode的discuss区看大神们的解答!

文章作者: breadhunter
文章链接: http://yoursite.com/2020/02/28/83%E5%88%A0%E9%99%A4%E6%8E%92%E5%BA%8F%E9%93%BE%E8%A1%A8%E4%B8%AD%E7%9A%84%E9%87%8D%E5%A4%8D%E5%85%83%E7%B4%A0/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 breadhunter
打赏
  • 微信
    微信
  • 支付寶
    支付寶