删除链表中的重复元素

  • 题目
  • 解决思路
  • 代码
  • 说明

题目

存在一个按升序排列的链表,给你这个链表的头节点 head,请你删除所有重复的元素,使每个元素 只出现一次 。然后返回同样按升序排列的结果链表。如下示例所示:

输入:head = [1,1,2]
输出:[1,2]

解决思路

命令指针p指向链表的头节点,然后判断p的下一个节点的值和p节点的值是否相等,若相等,则删除p的下一个节点,如果不相等,则将p向下移动一位,然后继续判断。

代码

  • C++代码
# include <stdio.h>struct ListNode {int val;ListNode *next;ListNode(): val(0), next(nullptr) {}ListNode(int val): val(val), next(nullptr) {}ListNode(ListNode *next): val(0), next(next) {}ListNode(int val, ListNode *next): val(val), next(next) {}
};class Solution {public:ListNode *deleteDuplicates(ListNode* head) {if (nullptr == head) {return head;}ListNode *p = head;while (p->next) {if (p->val == p->next->val) {        // 判断p节点的值和p节点的下一个节点的值是否相等p->next = p->next->next;} else {p = p->next;                    // 若p节点的值和p的下一个节点的值不相等,将p向下移动一位}}return head;}
};int main() {ListNode *a = new ListNode(1);ListNode *b = new ListNode(1);ListNode *c = new ListNode(2);ListNode *head = a;a->next = b;b->next = c;printf("before delete: ");while (head) {printf("%d ", head->val);head = head->next;}printf("\n");head = a;Solution *solution = new Solution();ListNode *ret = solution->deleteDuplicates(head);printf("after delete: ");while (ret) {printf("%d ", ret->val);ret = ret->next;}return 0;
}
  • python代码
# -*- coding: utf-8 -*-class ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextclass Solution:def deleteDuplicates(self, head: ListNode) -> ListNode:if not head:return headp: ListNode = headwhile p.next:if p.val == p.next.val:               # 判断p节点的值和p节点的下一个节点的值是否相等p.next = p.next.nextelse:                             # 若p节点的值和p的下一个节点的值不相等,将p向下移动一位p = p.nextreturn headdef main():a: ListNode = ListNode(1)b: ListNode = ListNode(1)c: ListNode = ListNode(2)head: ListNode = aa.next = bb.next = cprint("before delete: ", end='')while head:print(head.val, end=' ')head = head.nextprint()head = asolution: Solution = Solution()ret: ListNode = solution.deleteDuplicates(head)print("after delete: ", end='')while ret:print(ret.val, end=' ')ret = ret.nextreturnif __name__ == "__main__":main()

说明

  • 对应LeetCode第83题。
  • 链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/

删除按升序排列的单链表中的重复元素相关推荐

  1. 删除按升序排列的单链表中的所有重复元素

    删除单链表中的所有重复元素 题目 解决思路 代码 说明 题目 存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中没有重复出现的数字. ...

  2. 删除单链表中的重复节点

    删除单链表中的重复节点 一.题目描述 已知单链表L,写一算法,删除其中的重复节点.(更好的阅读体验,请访问程序员在旅途) 二.分析解答 2.1 知识点分析 本题主要考察链表的相关知识点,其中包括:单链 ...

  3. 算法---删除排序链表中的重复元素 II

    删除排序链表中的重复元素 II 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 .返回 已排序的链表 . 输入:head = [1,2,3,3,4,4,5] ...

  4. python 删除链表中的重复元素

    | 删除链表中的重复元素 存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 . 返回同样按升序排列的结果链表. 输入:head = [1,1, ...

  5. 删除排序链表中的重复元素 II

    82. 删除排序链表中的重复元素 II 存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字. 返回同样按升序排 ...

  6. Leetcode 129求根节点到叶节点数字之和、104二叉树的最大深度、8字符串转换整数(atoi)、82删除排序链表中的重复元素II、204二分查找、94二叉树的中序遍历、144二叉树的前序遍历

    Top1:Leetcode 129求根节点到叶节点数字之和 官方题解:https://leetcode.cn/problems/sum-root-to-leaf-numbers/solution/qi ...

  7. go数组去除重复_让我们一起啃算法----删除排序链表中的重复元素

    删除排序链表中的重复元素(Remove-Duplicates-From-Sorted-List) 题干: 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1-> ...

  8. LeetCode Algorithm 83. 删除排序链表中的重复元素

    83. 删除排序链表中的重复元素 Ideas 这题挺简单的,直接一次遍历,如果当前遍历的元素val跟下一个元素的val相等,说明是重复元素,直接把当前item的next指向item->next- ...

  9. java递归单链表查找中间元素_《数据结构与算法——C语言描述》答案 3.11 查找单链表中的特定元素(递归)...

    转载请注明出处:http://blog.csdn.net/xdz78 #include #include //查找单链表中的特定元素,<数据结构与算法--c语言描述> 3.11 答案 in ...

最新文章

  1. Myeclipse优化配置
  2. 美化你的.net WinForm应用程序
  3. 分享jQuery对象和Javascript对象之间的转换代码
  4. java学习笔记(五)----super用法,final用法,抽象类,接口
  5. 客户的一个紧急bug,我用了两种方式进行 C# 反编译修改源码
  6. DataGridView使用技巧一:获取或设置当前单元格的内容
  7. 想要在Mac 上运行 Windows 程序 不需要虚拟机也可以
  8. Android 12原生设计曝光,Android 12原生设计曝光 网友看了惊呼神似iOS
  9. java视频教程免费下载
  10. FFmpeg合并多个ts视频文件
  11. Percent Library百分比布局详解
  12. 论文精度MISC: A MIxed Strategy-Aware Model Integrating COMET for Emotional Support Conversation
  13. 魔法师元素平衡(C++解法)
  14. 下载:简体中文版Live Messenger 8.1 Beta
  15. 【项目实战】阿里云轻量云服务器中安装JDK1.8
  16. uniapp ios原生插件开发 (framework,cocoapods)
  17. C语言字符串处理函数 strchr()和 strstr()的区别及使用
  18. Centos7 常用的命令
  19. 群签名和Go语言实现细节(BBS04--Short Group Signatures)
  20. 国六排放法规下的重型车车载终端的革新

热门文章

  1. 690-文件管理和文件系统
  2. docker删除容器
  3. 【修理】电脑维修 显卡错误(错误代码:43)
  4. xray 被动_google搜索爬取xray被动扫描
  5. glibc 知:手册05:字符串和数组
  6. win7、win10关闭驱动签名,进入驱动测试模式,以及常见初级问题的解决
  7. 人工智能学期心得体会
  8. api数据接口文档_接口文档示例(Taobao/jd/pinduoduo/开放接口调用)
  9. 【03】品优购电商项目:00-品优购项目代码规范
  10. 在python培训价格