剑指Offer:删除链表的节点【18】

题目描述

  在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

题目分析

  

  如上图所示,我们的定义了三个指针,其中第二、三个指针用于找到重复元素的第一个位置和最后一个位置的下一个位置,然后第一个指针的下一个指向三个指针,这样就跳过了重复元素。

但是编码发现后,还有两种情况欠考虑。

  

  这种情况,刚开始,就是重复,那第一个指针直接指向最后一个指针,所以返回的时候不能直接返回pHead了,因为那样子的话,就相当于没有删除。当然还有一种情况就是重复元素直接到最后一个元素

  

  这时候我们需要处理一个边界问题,如果第三个指针的下一个为空,说明他已经是最后一个元素了,它与第二个指针之前的元素都是重复元素,都应该删除,所以我们直接让第一个指针指向空即可!

Java题解

package linklist;

import java.util.Scanner;

public class DeleteDuplication {
public static void main(String[] args) {
ListNode a1 = new ListNode(1);
ListNode a2 = new ListNode(1);
ListNode a3 = new ListNode(1);
ListNode a4 = new ListNode(1);
ListNode a5 = new ListNode(1);
ListNode a6 = new ListNode(1);
ListNode a7 = new ListNode(1);
a1.next=a2;
a2.next=a3;
a3.next=a4;
a4.next=a5;
a5.next=a6;
a6.next=a7;
deleteDuplication(a1);
} public static ListNode deleteDuplication(ListNode pHead)
{
if(pHead==null)
return null;
ListNode pA = new ListNode(0);
pA.next = pHead;
ListNode pB = pHead;
ListNode pC =pHead.next; ListNode start = pA; while (pC!=null)
{
if(pC.val!=pB.val)
{
pA=pA.next;
pB=pB.next;
pC=pC.next;
}else {
while (pC!=null&&pC.val == pB.val) {
pC = pC.next; //直到找到相等为止
}
pA.next = pC;
pB =pC;
if(pC==null)
break;
pC=pC.next;
}
}
start=start.next;
while (start!=null)
{
System.out.println(start.val);
start=start.next;
}
return null;
}
}

  

剑指Offer:删除链表的节点【18】的更多相关文章

  1. 剑指offer 删除链表的节点

    给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点. struct ListNode { int val; ListNode *next; }; void DeleteNode ...

  2. python实现剑指offer删除链表中重复的节点

    题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...

  3. [剑指offer]删除链表中重复的结点(把重复的都删掉,1个不留)

    ①题目 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 ...

  4. 剑指Offer——删除链表中重复的结点

    题目描述: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理 ...

  5. 《剑指offer》 链表中倒数第k个节点

    本题来自<剑指offer> 链表中倒数第k个节点 题目: 输入一个链表,输出该链表中倒数第k个结点. 思路: 倒数第k个节点,而且只能访问一遍链表,定义两个节点,两者之间相差k个距离,遍历 ...

  6. 剑指Offer:链表中环的入口节点【23】

    剑指Offer:链表中环的入口节点[23] 题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 题目分析 第一步确定链表中是否包含环,怎么确定呢?我们定义两个指针橙和 ...

  7. 剑指 Offer 22. 链表中倒数第k个节点

    剑指 Offer 22. 链表中倒数第k个节点 Offer 22 常规解法 常规解法其实很容易可以想到,只需要先求出链表的长度,然后再次遍历取指定长度的链接即可. package com.walega ...

  8. 力扣 - 剑指 Offer 22. 链表中倒数第k个节点

    题目 剑指 Offer 22. 链表中倒数第k个节点 思路1(栈) 既然要倒数第k个节点,那我们直接把所有节点放到栈(先进后出)里面,然后pop弹出k个元素就可以了 代码 class Solution ...

  9. 【剑指Offer】链表中倒数第k个节点 解题报告(Python)

    [剑指Offer]链表中倒数第k个节点 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-intervie ...

  10. LeetCode 剑指 Offer 22. 链表中倒数第k个节点

    剑指 Offer 22. 链表中倒数第k个节点 题意 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. ​ 例如,一个链表有 6 个 ...

随机推荐

  1. Android Studio +MAT 分析内存泄漏实战

    对于内存泄漏,在Android中如果不注意的话,还是很容易出现的,尤其是在Activity中,比较容易出现,下面我就说下自己是如何查找内存泄露的. 首先什么是内存泄漏? 内存泄漏就是一些已经不使用的对 ...

  2. Ubuntu免安装配置MySQL

    1.下载mysql http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz 2.解压 ta ...

  3. js 数组去重复

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. codeforces 486C Palindrome Transformation 贪心求构造回文

    点击打开链接 C. Palindrome Transformation time limit per test 1 second memory limit per test 256 megabytes ...

  5. JDK5新特性之线程同步工具类(三)

    一. Semaphore Semaphore能够控制同一时候訪问资源的线程个数, 比如: 实现一个文件同意的并发訪问数. Semaphore实现的功能就类似厕全部5个坑, 增加有十个人要上厕所, 那么 ...

  6. mixare的measureText方法在频繁调用时抛出“referencetable overflow max 1024”的解决方式

    这几天在搞基于位置的AR应用,採用了github上两款开源项目: mixare android-argument-reality-framework 这两个项目实现机制大致同样.我选取的是androi ...

  7. INSTALL_FAILED_UID_CHANGED解决的方法

    近期开发过程中又遇到了这个问题,最终找到了一个比較好的解决的方法.在此记录下. 打开手机或者pad中的设置----->安全----->未知来源(同意安装非安卓市场应用程序). 把这个取消, ...

  8. 转:DDR中端接技术基本概念

    DDR中端接技术基本概念  版权声明:转载请注明出处:http://blog.csdn.net/lg2lh https://blog.csdn.net/lg2lh/article/details/90 ...

  9. MySQL的安装过程

     近期对MySQL做了一些研究. 曾经主要接触的是SQL SERVER.所以,今天对该安装过程做了一些总结以及使用过程中的一些心得.并分享给大家. 记得前面.分享过一篇关于数据库的几种连接方式.而 ...

  10. win7查看端口占用

    1.查看谁占用了我们的80端口,在windows命令行窗口下执行:   netstat -aon|findstr 80 发现80端口被进程号为2596的进程占用.2.查看占用80端口进程的应用程序是什 ...