七周打卡剑指offer《 删除链表中重复的节点》
Posted JunMain
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了七周打卡剑指offer《 删除链表中重复的节点》相关的知识,希望对你有一定的参考价值。
删除链表中重复的节点
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留。
样例
样例1
输入:1->2->3->3->4->4->5
输出:1->2->5
样例2
输入:1->1->1->2->3
输出:2->3
题解
同一个数组记录每个节点出现的次数,模拟的时候当大于1的就跳过
有几个特殊情况需要考虑
1.原来是空链表
2.给的链表都是相同数字
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* head) {
int a[100010] = {0}, cnt = 0;
if(head == NULL) return NULL; //链表为空
ListNode* t = head, *ans = NULL;
while (t){
a[t->val]++;
t = t->next;
}
while (head){
if (a[head->val] == 1){
cnt++;
if(cnt == 1) ans = t = head;
else{
t->next = head;
t = t->next;
}
}
head = head->next;
}
if(ans == NULL) return NULL; //都是相同的数字
else t->next = NULL; //让最后一个指向NULL,不然会接着原来的顺序
return ans;
}
};
以上是关于七周打卡剑指offer《 删除链表中重复的节点》的主要内容,如果未能解决你的问题,请参考以下文章