• 删除链表中重复的结点


    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)。

  • 相关阅读:
    解释之前遗留的方法覆盖问题
    多态在开发中的作用
    多态的基础语法
    Go 统计汉子字符
    Go map
    Go make和new的区别
    Go 指针
    Go 切片
    Go数组
    Go中交换两个值类型
  • 原文地址:https://www.cnblogs.com/dyq19/p/10476136.html
Copyright © 2020-2023  润新知