首页 > 其他分享 >力扣-82-删除排序链表中的重复元素Ⅱ

力扣-82-删除排序链表中的重复元素Ⅱ

时间:2023-01-29 14:45:40浏览次数:47  
标签:力扣 重复 ptr2 next 链表 82 ptr1 指针

这个删除重复不太常规的是:它不是删除多出来的剩下一个,而是比如有三个1,1重复了,那这三个1节点都不要

	ListNode* deleteDuplicates(ListNode* head) {
		if (!head) return head;// 空链表直接返回
		// 虚拟头指针避免空头问题
		ListNode* virtual_node = new ListNode();
		virtual_node->next = head;
		// 指针1用来遍历,指针2用来标记重复段的起点
		// 还需要一个指针标记重复段的前一个位置
		ListNode* ptr1 = head->next, *ptr2 = head,*ptr3 = virtual_node;

		while (ptr1){
			if (ptr1->val != ptr2->val) {
				if (ptr2->next->val!=ptr1->val)
					// 说明中间存在重复段了
					ptr3->next = ptr1;
				else ptr3 = ptr2;
				ptr2 = ptr1;
			}
			ptr1 = ptr1->next;
		}
		// 还有一种情况是遍历指针走完了,但是最后一段还是重复段没有处理
		if (ptr2->next) ptr3->next = nullptr;
		return virtual_node->next;
	}

三指针,ptr1用来遍历整个链表,ptr2用来标记重复段的起始位置,ptr3用来标记重复段的前一个位置
删除重复段的操作就是:将ptr3的next指针指向ptr1

另外需要注意的是两个情况:

  1. 原本的头节点被删除了,考虑空头的情况用虚拟头节点技巧处理
  2. 链表的最后一段是重复的,但是遍历指针ptr1跑完了,循环体不再处理,这时候就需要一个收尾处理,ptr1最后的位置应该是指向结果链表的最后一个元素

标签:力扣,重复,ptr2,next,链表,82,ptr1,指针
From: https://www.cnblogs.com/yaocy/p/17072612.html

相关文章

  • 力扣---2315. 统计星号
    给你一个字符串s,每两个连续竖线'|'为一对。换言之,第一个和第二个'|'为一对,第三个和第四个'|'为一对,以此类推。请你返回不在竖线对之间,s中'*'的数目。注意......
  • 力扣-56-合并区间
    好吧,上一题排序的思路其实是这一题的…......
  • 力扣-57-插入区间
    采用最直接的思路,if-else去考虑每一种情况并做出操作(比如找到新区间左端点落在哪个位置,几种情况,然后再去考虑右端点的几种情况)是非常细致繁琐的,以至于很容易出错考虑三种......
  • 美国亚马逊家用电器UL​​认证​​家用厨房绞肉机UL982测试报告办理
    家用绞肉机的需求变化:作为满足家庭烹饪基本实需求的工具类产品,绞肉机帮助经常在家烹饪或偶尔下厨的人群节省时间,解放双手或减轻劳动力。从需求角度来看:一是自动化代替手动操......
  • 【C++ 数据结构:链表】二刷LeetCode707设计链表
    【C++链表】使用c++重新写一遍LeetCode707设计链表目的是熟悉c++中链表的操作知识点C++链表节点的实现在c++中,一般通过结构体来定义链表的节点,也需要写构造函数(使用初......
  • 力扣每日一题2023.1.28---1664. 生成平衡数组的方案数
    给你一个整数数组nums。你需要选择恰好一个下标(下标从0开始)并删除对应的元素。请注意剩下元素的下标可能会因为删除操作而发生改变。比方说,如果nums=[6,1,7,4,1]......
  • 剑指pffer 06. 从尾到头打印链表
    1.题目输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。2.代码方法一:/***Definitionforsingly-linkedlist.*publicclassListNode{*intval......
  • 链表简单题
    面试题02.03.删除中间节点难度简单173收藏分享切换为英文接收动态反馈若链表中的某个节点,既不是链表头节点,也不是链表尾节点,则称其为该链表的「中间节点」。假定已知......
  • 《HelloGitHub》第 82 期
    兴趣是最好的老师,HelloGitHub让你对编程感兴趣!简介HelloGitHub分享GitHub上有趣、入门级的开源项目。https://github.com/521xueweihan/HelloGitHub这里有实......
  • 力扣111 二叉树的最小深度
    题目:给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例:输入:root=[3,9,20,nul......