82. 删除排序链表中的重复元素 II
时间:2019-09-15
本文章向大家介绍82. 删除排序链表中的重复元素 II,主要包括82. 删除排序链表中的重复元素 II使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、自己写出来的惨不忍睹,没有可读性,面向错误样例编程的代码。思路其实是差不多的,但是一点没有优化,十分恶心。
1 ListNode* deleteDuplicates(ListNode* head) { 2 if (head == nullptr) 3 return nullptr; 4 ListNode* dummy = new ListNode(0); 5 dummy->next = head; 6 ListNode* pre = dummy; 7 ListNode* temp = head; 8 bool same = false; 9 while (temp != nullptr &&temp->next!=nullptr) 10 { 11 if (temp->val == temp->next->val) 12 { 13 pre->next = temp->next; 14 temp = temp->next; 15 same = true; 16 } 17 else if (same == true) 18 { 19 same = false; 20 pre->next = temp->next; 21 temp = temp->next; 22 } 23 else 24 { 25 pre = temp; 26 temp = temp->next; 27 } 28 } 29 if (same == true) 30 pre->next = temp->next; 31 return dummy->next; 32 }
二、题解中的非递归代码。思路和我的差不多,把重复的都走一遍,走到不重复的连起来。<真·精简><真·易懂>
1 ListNode* deleteDuplicates(ListNode* head) { 2 if (head == nullptr) 3 return nullptr; 4 ListNode* dummy = new ListNode(0); 5 dummy->next = head; 6 ListNode* temp = head; 7 ListNode* res = dummy; 8 while (temp != nullptr) 9 { 10 bool same = false; 11 while (temp != nullptr&&temp->next != nullptr&&temp->val == temp->next->val) 12 { 13 same = true; 14 temp = temp->next; 15 } 16 if (same == false) 17 { 18 res->next = temp; 19 res = res->next; 20 } 21 temp = temp->next; 22 } 23 res->next = nullptr; 24 return dummy->next; 25 }
三、递归代码:
1 ListNode* deleteDuplicates(ListNode* head) { 2 if (head == nullptr) 3 return nullptr; 4 if (head->next != nullptr&&head->val == head->next->val) 5 { 6 while(head->next!=nullptr&&head->val==head->next->val) 7 head = head->next; 8 return deleteDuplicates(head->next); 9 } 10 else 11 { 12 head->next = deleteDuplicates(head->next); 13 } 14 return head; 15 }
四、快慢指针:差东西,可读性差
ListNode* deleteDuplicates(ListNode* head) { if (head == nullptr) return nullptr; ListNode* dummy = new ListNode(0); dummy->next = head; ListNode* fast = head; ListNode* slow = dummy; while (fast) { if (fast->next&&fast->val != fast->next->val) { if (slow->next == fast) slow = fast; else slow->next = fast->next; } else if (!fast->next) { if (slow->next != fast) { slow->next = nullptr; } } fast = fast->next; } return dummy->next; }
原文地址:https://www.cnblogs.com/zouma/p/11522567.html
- Yarn(MapReduce 2.0)下分布式缓存(DistributedCache)的注意事项
- Yaffs_guts(三)
- 浅谈 python multiprocessing(多进程)下如何共享变量
- 文件地址映射之yaffs_GetTnode
- bash/shell 解析命令行参数工具:getopts/getopt
- ssh 双机互信:免密码登录设置步骤及常见问题
- yaffs_guts(一)
- 聊聊 Java 中 HashMap 初始化的另一种方式
- 基于 Hive 的文件格式:RCFile 简介及其应用
- MapReduce 计数器简介
- 流水线乘法器
- Hive 基础(2):库、表、字段、交互式查询的基本操作
- 玩转 Linux 之:磁盘分区、挂载知多少?
- Flume NG 简介及配置实战
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 一套常用的css初始化样式
- Octave 笔记
- VSCode如何设置Vue前端的debug调试
- Istio安全-授权(实操三)
- SpringBoot入门建站全系列(三十六)AspectJ做AOP日志管理
- 图像处理笔记(1)----OpenCV 图像BGR转RGB
- Intellij IDEA常用操作整理手册
- IDEA类和方法注释模板设置(非常详细)
- 《JavaScript 模式》读书笔记(7)— 设计模式2
- 《JavaScript 模式》读书笔记(7)— 设计模式3
- 弄它!!!Ospf--动态路由--链路状态路由协议!全面解析OSPF协议!
- 弄它!!!理论加实验,小小ISIS分分钟拿下!!
- 「Mysql索引原理(二)」Mysql高性能索引实践,索引概念、BTree索引、B+Tree索引
- 「Mysql索引原理(一)」1.存储引擎简介
- 弄它!!!小小BGP!理论加实验分分钟拿下!带你体验大网的世界!