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;
    
        }
    }
  • 相关阅读:
    centos Cannot allocate memory for the buffer pool
    hive query with field is json
    doubleclick video notes
    shell command
    最简单好用的免费录屏软件
    mysql export query result
    浏览器-前端网络
    vue-main.js中new vue()的解析
    webpack-从零搭建vuecli环境
    【js重学系列】call-apply-bind
  • 原文地址:https://www.cnblogs.com/wenbaoli/p/5655722.html
Copyright © 2011-2022 走看看