LeetCode //C - 83. Remove Duplicates from Sorted List

83. Remove Duplicates from Sorted List

Given the head of a sorted linked list, delete all duplicates such that each element appears only once. Return the linked list sorted as well.

Example 1:

Input: head = [1,1,2]
Output: [1,2]

Example 2:

Input: head = [1,1,2,3,3]
Output: [1,2,3]

Constraints:
  • The number of nodes in the list is in the range [0, 300].
  • -100 <= Node.val <= 100
  • The list is guaranteed to be sorted in ascending order.

From: LeetCode

Link: 83. Remove Duplicates from Sorted List


Solution:

Ideas:
  1. Check for an Empty List: Before beginning any operations on the linked list, the code checks if the head pointer is NULL. If it is, the function immediately returns NULL, indicating that the list is empty and there are no nodes to process.

  2. Traversal with Current Pointer: The function uses a pointer called current to traverse the linked list. This pointer starts at the head of the list.

  3. Duplicate Removal Logic: As the list is sorted, all duplicates of an element are adjacent. The current pointer checks the current node (current) against the next node (current->next). If both nodes have the same value (current->val == current->next->val), it means a duplicate is found.

  4. Removing the Duplicate Node:

  • To remove the duplicate, the link from the current node to the next node is redirected to skip one node, effectively removing the next node from the list (current->next = current->next->next).
  • The removed node is then freed using free(), assuming memory management functions are available. This is crucial to prevent memory leaks.
  1. Advancement: If no duplicate is found, the current pointer simply moves to the next node in the list (current = current->next).

  2. Continuation Until the End: This process is repeated until current or current->next becomes NULL, indicating that the end of the list has been reached or there are no more nodes to compare.

  3. Return the Modified List: Finally, the function returns the modified list starting from head. All duplicates have been removed, and the list remains sorted.

Code:
c 复制代码
struct ListNode* deleteDuplicates(struct ListNode* head) {
    if (head == NULL) return NULL;

    struct ListNode* current = head;
    while (current->next != NULL) {
        if (current->val == current->next->val) {
            // Remove the duplicate node
            struct ListNode* temp = current->next;
            current->next = temp->next;
            free(temp); // Assuming stdlib.h is included for free()
        } else {
            current = current->next; // Move to the next element if no duplicate
        }
    }
    return head;
}
相关推荐
CoovallyAIHub4 小时前
港大&字节重磅发布DanceGRPO:突破视觉生成RLHF瓶颈,多项任务性能提升超180%!
深度学习·算法·计算机视觉
CoovallyAIHub5 小时前
英伟达ViPE重磅发布!解决3D感知难题,SLAM+深度学习完美融合(附带数据集下载地址)
深度学习·算法·计算机视觉
聚客AI1 天前
🙋‍♀️Transformer训练与推理全流程:从输入处理到输出生成
人工智能·算法·llm
大怪v1 天前
前端:人工智能?我也会啊!来个花活,😎😎😎“自动驾驶”整起!
前端·javascript·算法
惯导马工1 天前
【论文导读】ORB-SLAM3:An Accurate Open-Source Library for Visual, Visual-Inertial and
深度学习·算法
骑自行车的码农1 天前
【React用到的一些算法】游标和栈
算法·react.js
博笙困了1 天前
AcWing学习——双指针算法
c++·算法
moonlifesudo1 天前
322:零钱兑换(三种方法)
算法
NAGNIP2 天前
大模型框架性能优化策略:延迟、吞吐量与成本权衡
算法
美团技术团队2 天前
LongCat-Flash:如何使用 SGLang 部署美团 Agentic 模型
人工智能·算法