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;
}
相关推荐
第九序言T33 分钟前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完
开发语言·python·自动化·pandas·数据处理
ZhengEnCi2 小时前
Agent 架构怎么选:从单 Agent 到多 Agent 编排的选型决策指南
算法·架构
龙亘川2 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
程序喵大人2 小时前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
秋天的怀念_David2 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Raas1002 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
Pniubi3 小时前
力扣283移动零(双指针法)
算法·leetcode·职场和发展
hhb_6183 小时前
大模型落地三重优化实战
人工智能·算法·机器学习
云和数据.ChenGuang3 小时前
光哥说Python RAG 系统需要哪些评估指标:从检索到生成的全链路评测指南
网络·人工智能·python·算法·langchain
专注仿真3 小时前
线性回归和逻辑回归算法详解
开发语言·人工智能·python·大模型训练·控制算法