删除有序链表中重复的元素-II(链表)

简介: 双指针,slow和fast,并且增加标记flag初始为1。

d80cac1c071f4aef85df7679439b675e.png

乌!蒙!山!连!着!山!外!山!


题目:

5297d0a94896430d8c153296f0df4fc8.png


思路:

双指针,slow和fast,并且增加标记flag初始为1。


如果slow指向节点值等于fast指向节点值,fast向后走,flag置为0;


如果slow指向节点值不等于fast指向节点值,观察flag的值若为0,slow指向fast,fast向后走,flag置为1,然后continue;观察flag的值若不为0,将该节点拿下来,成为我们的目标节点去处理。


剩下的就是细节以及最后一个节点的问题,比较简单,判断一下就好。



代码:

struct ListNode* deleteDuplicates(struct ListNode* head)
{
    // write code here
    if (head == NULL || head->next == NULL)
        return head;
    struct ListNode* tail = NULL;
    struct ListNode* newhead = NULL;
    struct ListNode* slow = head;
    struct ListNode* fast = slow->next;
    int flag = 1;
    while (fast)
    {
        if (slow->val == fast->val)
        {
            fast = fast->next;
            flag = 0;
        }
        else
        {
            if (flag == 0)
            {
                slow = fast;
                fast = fast->next;
                flag = 1;
                continue;
            }
            if (newhead == NULL)
            {
                tail = newhead = slow;
            }
            else
            {
                tail->next = slow;
                tail = slow;
            }
            slow = fast;
            fast = fast->next;
        }
    }
    if (flag == 1)
    {
        if (tail)
            tail->next = slow;
        else
            newhead = slow;
    }
    else
    {
        if (tail)
            tail->next = NULL;
    }
    return newhead;
}
目录
相关文章
|
12月前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
126 1
|
12月前
Leetcode第21题(合并两个有序链表)
这篇文章介绍了如何使用非递归和递归方法解决LeetCode第21题,即合并两个有序链表的问题。
152 0
Leetcode第21题(合并两个有序链表)
|
4月前
|
存储
203. 移除链表元素,707.设计链表,206. 反转链表
链表是数据结构中的重要概念,包含单链表、双链表和循环链表。单链表每个节点存储数据与下一节点指针;双链表增加上一节点指针;循环链表首尾相连。 **例题解析:** 1. **203. 移除链表元素**:通过遍历链表删除指定值节点,注意处理头节点特殊情况。 2. **707. 设计链表**:实现链表的增删查操作,需理解指针操作逻辑,避免直接修改目标节点。 3. **206. 反转链表**:采用双指针或递归方法改变节点指向,完成链表反转。 以上题目涵盖链表核心操作,掌握后可灵活应对相关问题。
|
12月前
|
存储 算法
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
268 0
|
Python
【Leetcode刷题Python】21. 合并两个有序链表
介绍了几种不同的方法来合并多个已排序的链表,包括暴力求解、使用小顶堆以及分而治之策略。
151 2
|
程序员
【刷题记录】移除链表元素
【刷题记录】移除链表元素
|
存储 算法
LeetCode第83题删除排序链表中的重复元素
文章介绍了LeetCode第83题"删除排序链表中的重复元素"的解法,使用双指针技术在原链表上原地删除重复元素,提供了一种时间和空间效率都较高的解决方案。
LeetCode第83题删除排序链表中的重复元素
【数据结构OJ题】合并两个有序链表
力扣题目——合并两个有序链表
104 8
【数据结构OJ题】合并两个有序链表
|
12月前
【LeetCode 06】203.移除链表元素
【LeetCode 06】203.移除链表元素
84 0