博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode之Remove Duplicates from Sorted List II
阅读量:6254 次
发布时间:2019-06-22

本文共 1202 字,大约阅读时间需要 4 分钟。

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

For example,

Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.

这道题比上一道题难度大很多,首先,好多情况都要考虑

因为是要删除链表中的重复元素,所以要分好多种情况,如果整个链表的元素相同?如果头结点和第二个元素相同?如果最后两个元素相同?

这道题自己没想起来,看剑指offer上面试题57才有了大致的思路,定义一个指向head的结点可以省好多事

另外,定义了一个布尔变量,如果值相同,就代表应该删除,这里很巧妙的如果布尔值为true那么我继续指向下一个元素,否则两个指针都向前推进。

下面附上代码:

public ListNode deleteDuplicates(ListNode head) {          if(head == null || head.next == null) return head;          ListNode newHead = new ListNode(-1);          newHead.next = head;          ListNode p1 = newHead;          ListNode p2 = head;          while(p2!=null){              boolean dup = false;              while(p2.next!=null && p2.val == p2.next.val){                  dup = true;                  p2 = p2.next;              }              if(dup){                  p2 = p2.next;                  continue;              }              p1.next = p2;              p1 = p1.next;              p2 = p2.next;          }          p1.next = p2;          return newHead.next;       }

  稍后再看看剑指offer上的源码。

 

转载于:https://www.cnblogs.com/gracyandjohn/p/4444305.html

你可能感兴趣的文章
c2java select algorithm
查看>>
Java Runtime.exec
查看>>
Gradle基本使用(1):安装、IDEA使用
查看>>
Linux查看用户及其权限管理
查看>>
Kentico中的skin.css的加载
查看>>
闪聊的beta版推出了
查看>>
WCF光芒下的Web Service
查看>>
批处理常用命令总结2
查看>>
ubuntu双网卡bonding配置(转)
查看>>
expect语法基础: while、for 循环、if 语句的用法示例
查看>>
ubuntu 9.04 的 NTFS 分区自动加载
查看>>
现代软件工程讲义 7 设计阶段 Spec
查看>>
精确控制MFC控件窗口的位置和大小(top|left|width|height)
查看>>
解读ASP.NET 5 & MVC6系列(9):日志框架
查看>>
Atitit.Gui控件and面板----数据库区-mssql 2008 权限 配置 报表查看成员
查看>>
codeforces 468B 2-sat
查看>>
php对uploads文件的处理问题的解决
查看>>
Python urllib简单使用
查看>>
C# 使用xenocode混淆加密【转】
查看>>
Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结(转)
查看>>