zoukankan      html  css  js  c++  java
  • 剑指offer——删除链表中重复的结点

    继续链表;原题目链接:删除链表中重复的结点

    题目描述:

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

    题目分析:

    删除一个结点很简单,只需要将当前指针指向下一个结点的指向结点即可;即a.next=b.next即可。

    但是若要连自身节点也要删去,则需要另外一个指针,记录上一个结点

    还有一个特殊情况就是:当重复的节点位于头结点时,没有上一个结点,只需要抛弃头结点即可。

    判断重复时,也要考虑到多个结点重复的情况,不能发现两者重复就直接删除;还要判断接下来的结点是否重复,直至不重复为止。

    实现代码如下:

     1 public class Solution {
     2     public ListNode deleteDuplication(ListNode pHead)
     3     {
     4         ListNode preNode = null; //用作记录上一个节点的节点
     5         ListNode curNode = pHead; //用作记录当前节点的节点
     6 
     7         while(curNode != null ){
     8             if(curNode.next != null && curNode.val==curNode.next.val){
     9                 //若当前与下一个结点的值重复
    10                 while(curNode.next != null && curNode.next.val == curNode.val){
    11                     curNode = curNode.next; //持续判断下去,直到链表的末尾或者不重复为止
    12                 }
    13                 curNode = curNode.next;
    14                 if(preNode == null){
    15                     pHead = curNode;
    16                 }else {
    17                     preNode.next = curNode;
    18                 }
    19             }else{
    20                 //若当前与下一个结点的值不重复,继续比较下一个结点
    21                 preNode = curNode;
    22                 curNode = curNode.next;
    23             }
    24         }
    25         //返回头节点
    26         return pHead;
    27     }
    28 }

    此代码以通过牛客网。

  • 相关阅读:
    Zookeeper_ZAB协议
    Zookeeper_Paxos算法
    Eureka的表兄弟Zookeeper理论基础
    SSE:服务器推送事件
    BIO、NIO、AIO入门认识
    c语言float、double数据保留2位小数
    c语言在8位bmp位图上画一个框并另存
    C语言在24真彩位图上指定位置处画一条横线
    vs2010 opengl 环境搭建
    osg模型操作之替代节点
  • 原文地址:https://www.cnblogs.com/shengguilv/p/12984373.html
Copyright © 2011-2022 走看看