牛客 JZ56 删除链表种重复的节点

文章目录

  • 问题描述
  • 解题报告
  • 实现代码
  • 参考资料

问题描述

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

解题报告

注意点:

  • 哨兵节点的设置
  • 通过一个循环寻找重复的节点

实现代码

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead)
    {
        ListNode* dummy = new ListNode(-1);
        dummy->next = pHead;
        ListNode *tmp=dummy;
        while(tmp){
            ListNode* nxt = tmp->next;
            while(nxt&&nxt->next&&nxt->val==nxt->next->val){
                nxt = nxt->next;
            }
            if(tmp->next==nxt)tmp=tmp->next;
            else if(nxt->next)tmp->next=nxt->next;
            else tmp->next = nullptr;
        }
        return dummy->next;
    }
};

参考资料

[1] 牛客 JZ56 删除链表种重复的节点

你可能感兴趣的:(牛客网,链表)