82. 删除排序链表中的重复元素 II
2023-09-27 14:26:29 时间
题目:
给定一个已排序的链表的头 head
, 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。
思路;
具体地,我们从指针 cur,cur->next 指向链表的头节点,随后开始对链表进行遍历。如果当前 cur->next 与 cur->next->next 对应的元素相同,那么我们就将 cur->next 和 cur->next 从链表中移除;否则说明链表中已经不存在其它与 cur 对应的元素相同的节点,因此可以将cur 指向 cur.next。当遍历完整个链表之后,我们返回链表的头节点即可。
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/*
*deleteDuplicates:给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表
struct ListNode* head;已排序的链表的头 head
返回值:已排序的链表
*/
struct ListNode* deleteDuplicates(struct ListNode* head){
if(head == NULL)
{
return head;
}
struct ListNode * m = malloc(sizeof(struct ListNode));//慢指针用于返回
m->next = head;
struct ListNode * k = m;//快指针
int x;
while(k->next && k->next->next)
{
if(k->next->val == k->next->next->val)//当前位置的下一个等于下下个节点
{
x=k->next->val;//临时保存下一个节点数据
while(k->next && k->next->val == x)//把所有的相等的数都删了
{
k->next = k->next->next;//删除相等的节点
}
}
else
{
k = k->next;
}
}
return m->next;
}
相关文章
- 【BZOJ4548】小奇的糖果 set(链表)+树状数组
- 数据结构与算法分析(排序,递归,链表)
- C#,单向链表(Simply Linked List)的归并排序(Merge Sort)算法与源代码
- 了解集合本质必须要知晓的概念01-链表
- 寻找 两个链表的第一个公共结点
- 【计导作业】链表——差集与交集
- 力扣21 - 合并两个有序链表【归并排序思维】
- LeetCode082之删除排序链表中的重复元素II(相关话题:链表)
- 华为OD机试 - 寻找链表的中间结点(JavaScript) | 机试题+算法思路+考点+代码解析 【2023】
- 5链表的应用--学生管理系统
- 【leetcode】82: 删除排序链表中的重复元素 II
- Java开发 - 双向链表不可怕
- 数据结构之__链表
- leetcode 148. Sort List 排序链表(中等)
- 算法补天系列之——链表,以及部分排序稳定性知识
- 算法练习-第二天(合并两个排序的链表)