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;
    
        }
    }
  • 相关阅读:
    九度OJ 1283 第一个只出现一次的字符
    九度OJ 1514 数值的整数次方【算法】
    九度OJ 1512 用两个栈实现队列 【数据结构】
    九度OJ 1513 二进制中1的个数
    九度OJ 1510 替换空格
    九度OJ 1511 从尾到头打印链表
    dom4J使用笔记
    XML的学习
    jaxp使用笔记
    json-lib使用笔记
  • 原文地址:https://www.cnblogs.com/wenbaoli/p/5655722.html
Copyright © 2011-2022 走看看