zoukankan      html  css  js  c++  java
  • 链表:删除链表中重复的结点(java实现)

    题目描述

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

    代码如下:未进行优化

    
     public class ListNode {
        int val;
        ListNode next = null;
    
        ListNode(int val) {
            this.val = val;
        }
    }
    
    public class Solution {
        //将所有重复的结点都删除
        public ListNode deleteDuplication(ListNode pHead)
        {
    
    
            if(pHead == null){
                return null;
            }
    
            ListNode realHead = new ListNode(-1);
            realHead.next = pHead;
            ListNode p = realHead;//存储当前结点的前趋
            ListNode q;
            q = pHead;//存储当前结点
    
    
            while(q != null){
    
                int value = q.val;
                ListNode l = q.next;
                boolean flag = false;
                while(l != null && l.val == value){
                    flag = true;
                    l = l.next;
                }
                if(l == null){
                    if(flag){
                        p.next = null;
                        break;
                    }else{
                        break;
                    }
                }         
                if(l.val != value){
    
                    if(flag){
                        p.next = l;
                        q = l;
                        l = q.next;
                    }else{
                        p = q;
                        q = l;
                        l = q.next;
    
                    }
                }
    
            }
    
            return realHead.next;
    
        }
    
     /**
         * 牛客网:删除链表中重复出现的结点(该程序实现的是将重复出现的值的结点保留一个
         * @param pHead
         * @return
         */
        public ListNode deleteDuplication(ListNode pHead)
        {
    
            if(pHead == null){
                return null;
            }
            ListNode p = pHead;//存储当前结点的前趋
            ListNode q;
            q = pHead.next;//存储当前结点
    
            while(q != null){
                if(p.val == q.val){//当前元素已经出现过,则删除该结点
                    p.next = q.next;
                    q = p.next;
                    continue;
                }else{
                    p = q;
                    q = p.next;
                }
    
    
            }
    
            return pHead;
    
        }
    }
  • 相关阅读:
    ASP.NET面试题(二)
    iBatis.Net系列(四) iBatisNet API基础
    ibatisnet系列(一) 总览
    iBatisnet系列(二) 配置运行环境和日志处理
    HDU 1575 Tr A (矩阵乘法)
    HDU 连连看
    1504: ZZ的橱柜 (优先队列)
    离散化思想
    POJ 2777 Count Color (线段树)
    POJ 1823 Hotel (线段树)
  • 原文地址:https://www.cnblogs.com/wenbaoli/p/5655722.html
Copyright © 2011-2022 走看看