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

    56. 删除有序链表中的重复结点

    题目描述

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

    分析

    借助辅助头结点,可避免单独讨论头结点的情况。设置两个结点 pre 和 cur,当 cur 和 cur.next 值相等,cur 一直向前走,直到不等退出循环,这时候 cur 指的值还是重复值,调整 cur 和 pre 的指针再次判断

    /*
     public class ListNode {
        int val;
        ListNode next = null;
    
        ListNode(int val) {
            this.val = val;
        }
    }
    */
     1 public class Solution {
     2     public ListNode deleteDuplication(ListNode pHead)
     3     {
     4         if(pHead == null || pHead.next == null){
     5             return pHead;
     6         }
     7         
     8         // 每访问一个结点,循环判断是否重复
     9         ListNode cur = pHead;    // 指向当前结点
    10        // 创建一个辅助头结点,指向前一个元素的指针,方便删除
    11         ListNode head = new ListNode(Integer.MIN_VALUE);
    12          head.next = pHead;
    13         ListNode pre = head;
    14        
    15         while(cur != null){
    16             if(cur.next != null && cur.val == cur.next.val){
    17                 // 如果重复,一直后移,直到找到不相等的结点
    18                 while(cur.next != null && cur.val == cur.next.val){
    19                     cur = cur.next;
    20                 }
    21                 cur = cur.next;    // 这个cur所指结点即是下一个不重复的结点
    22                 pre.next = cur;
    23             }else{
    24                 pre= cur;
    25                 cur = cur.next;
    26             }
    27         }
    28         return head.next;
    29     }
    30 }
  • 相关阅读:
    组合 聚合 依赖 关联
    effective C++ 总结
    重讲设计模式
    宏定义要加括号
    enum hack
    MFC 刷新函数:Invaldate,UpdateWindow,InvaldateRect
    MFC onchar()
    win7系统自带分区工具,能分出逻辑分区
    窗口的创建步骤
    私话编译连接运行过程以及动态库、静态库
  • 原文地址:https://www.cnblogs.com/hi3254014978/p/12347103.html
Copyright © 2011-2022 走看看