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

    题目描述

    在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。

    例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

    思路

    构造一个“头指针”指向链表。
    从链表的表头开始遍历,每次判断当前结点是否满足继续留在链表的条件。
    

    时间复杂度O(n),空间复杂度O(1)。

    代码

    /*
     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 || pHead.next == null)    return pHead;
            ListNode Head = new ListNode(0);
            Head.next = pHead;
            ListNode pre = Head;
            ListNode p = Head.next;
            while(p != null) {
                if(p.next != null && p.val == p.next.val) {
                    while(p.next != null && p.val == p.next.val) {
                        p = p.next;
                    }
                    p = p.next;
                    pre.next = p;    // 若重复,则跳过
                } else {
                    pre = pre.next;  // 不重复,则加入
                    p = p.next;
                }
            }
            return Head.next;
        }
    }
    

    笔记

    在表头前添加一个辅助结点,有助于减少边界条件的特殊情况。

  • 相关阅读:
    注意技巧小结
    小数点转百分比
    Mysql 性能监控及调优
    Linux下快速安装Mysql及使用
    如何建立压力计算模型
    Redis 2种持久化模式的缺陷
    Redis性能调优建议
    Node.js学习入门手册
    手机APP脚本录制(LoadRunner 12)
    Linux系统内核性能调优
  • 原文地址:https://www.cnblogs.com/ustca/p/12395530.html
Copyright © 2011-2022 走看看