删除有序链表中重复的元素-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;
}
目录
相关文章
|
4月前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
51 1
|
4月前
Leetcode第21题(合并两个有序链表)
这篇文章介绍了如何使用非递归和递归方法解决LeetCode第21题,即合并两个有序链表的问题。
65 0
Leetcode第21题(合并两个有序链表)
|
4月前
|
存储 算法
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
156 0
|
6月前
|
Python
【Leetcode刷题Python】21. 合并两个有序链表
介绍了几种不同的方法来合并多个已排序的链表,包括暴力求解、使用小顶堆以及分而治之策略。
61 2
|
6月前
|
程序员
【刷题记录】移除链表元素
【刷题记录】移除链表元素
|
8月前
|
存储 算法 C语言
【数据结构与算法 刷题系列】合并两个有序链表
【数据结构与算法 刷题系列】合并两个有序链表
01_移除链表元素
01_移除链表元素
|
4月前
【LeetCode 06】203.移除链表元素
【LeetCode 06】203.移除链表元素
41 0
|
6月前
|
存储 算法
LeetCode第83题删除排序链表中的重复元素
文章介绍了LeetCode第83题"删除排序链表中的重复元素"的解法,使用双指针技术在原链表上原地删除重复元素,提供了一种时间和空间效率都较高的解决方案。
LeetCode第83题删除排序链表中的重复元素
|
7月前
【数据结构OJ题】合并两个有序链表
力扣题目——合并两个有序链表
53 8
【数据结构OJ题】合并两个有序链表