七周打卡剑指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《 删除链表中重复的节点》的主要内容,如果未能解决你的问题,请参考以下文章

剑指OFFER_删除链表中重复的节点

剑指Offer(链表)-删除链表中重复的节点

剑指Off打卡day36—— ACWing29. 删除链表中重复的节点

剑指offer-删除链表中重复的节点

剑指offer链表题的双指针法总结

剑指Offer删除链表中重复的节点