题解 | #删除链表中重复的结点#

删除链表中重复的结点

https://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef


/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
  public:
    ListNode* deleteDuplication(ListNode* pHead) {
        if (pHead == nullptr) return nullptr;

        // 创建一个虚拟头节点
        ListNode* dummy = new ListNode(0);
        dummy->next = pHead;

        ListNode* prev = dummy;  // 前驱节点
        ListNode* current = pHead;  // 当前节点

        while (current != nullptr && current->next != nullptr) {
            if (current->val == current->next->val) {
                // 找到重复节点,跳过所有重复的节点
                int duplicateVal = current->val;
                while (current != nullptr && current->val == duplicateVal) {
                    current = current->next;
                }
                prev->next = current;  // 跳过所有重复的节点
            } else {
                // 无重复,移动前驱节点
                prev = current;
                current = current->next;
            }
        }

        // 返回新的头节点
        ListNode* newHead = dummy->next;
        delete dummy;  // 释放虚拟头节点的内存
        return newHead;
    }

};

全部评论

相关推荐

挥毫自在:想白嫖你呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务