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

    题目描述

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

    解题思路

    利用一个指针指向当前需要检查的结点p的前一个指针pre,对于当前要检查的结点p,对后面的结点进行遍历,直到找到与之不同的结点,如果存在相同的结点,那么p的前一个结点指向找到的不同于的p的结点,删除p和其重复的值,然后p指向pre的下一个结点(找到的不同于原来p的结点),继续判断,直到链表的末尾。

    实现

    /*链表结点的定义*/
     public class ListNode {
        int val;
        ListNode next = null;
    
        ListNode(int val) {
            this.val = val;
        }
    }
    /*实现*/
    public class Solution {
        public ListNode deleteDuplication(ListNode pHead)
        {
            ListNode pre = null, p = pHead;
            if (pHead == null || pHead.next == null) return pHead;
            while (p != null){
                ListNode q = p.next;
                int count = 0;
                while (q!=null && q.val == p.val){
                    q = q.next;
                    count ++;
                }
    
                if (count > 0){
                    //有重复的
                    if (pre == null) pHead = q;
                    else pre.next = q;
                }else {
                    if (pre == null) pHead = p;
                    pre = p;
                }
    
                p = q;
    
            }
    
            return pHead;
        }
    }
    
  • 相关阅读:
    c语言中srand和rand函数 生成随机数总结
    枚举类型
    VS2008快捷键使用技巧
    PV实现同步
    PV操作(深入显出)
    数字在排序数组中出现的次数
    两个链表的第一个公共结点
    数组中的逆序对
    第一个只出现一次的字符位置
    丑数
  • 原文地址:https://www.cnblogs.com/ggmfengyangdi/p/5814383.html
Copyright © 2011-2022 走看看