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

    public class Solution {
        public ListNode deleteDuplication(ListNode pHead)
        {
            if(pHead == null || pHead.next == null) return pHead;//特殊情况
            else {
                ListNode p1 = pHead;
                ListNode p = new ListNode(-1);//新建头节点,指向符合条件的链表末尾
                p.next = p1;
                while(p1.next != null){ 
                    if(p1.val == p1.next.val){ 
                        int i = p1.val;                  //记录下来 防止有多个相同值
                        while(p1.val == i){
                            p1 = p1.next;
                            if(p1 == null){   //到末尾说明尾部都要删掉
                                p.next = null;
                                if(pHead.val == i) return null;      //全都是一个值的情况
                                else return pHead;
                            }
                        }
                        p.next = p1;
                        if(pHead.val == i) {  //开头重复的情况
                         pHead = p1;
                        }
                    }
                    else{
                        p = p1;
                        p1 = p1.next;
                    }
                }
                return pHead;
               
            }

        }
    }

    之前用p1,p2两个结点,后发现复杂改为一个结点,但时间反而用得多了(20ms vs 31ms)。

  • 相关阅读:
    OC基础--常用类的初步介绍与简单使用之NSDate
    mysql创建自定义函数与存储过程
    Hibernate Session 获取connection
    mysql中isnull,ifnull,nullif的用法
    mysql数据库中某项其中一个值在该项排第几,百分几
    linux下的ImageMagick安装方法
    Java 判断操作系统类型(适用于各种操作系统)
    tesseract 字体训练资料篇
    structDemo1
    C语言中.h和.c文件解析(很精彩)
  • 原文地址:https://www.cnblogs.com/dyq19/p/10476136.html
Copyright © 2011-2022 走看看