• 3在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5


    法1:非递归,遍历的同时删除。添加一个辅助头节点,方便索引整个链表;设置pre、last指针,pre指向当前确定不重复的那个结点,last为工作指针,一直往后面搜索。

    需要注意的问题:当头结点重复的时候,要删除头结点。(通过新建头结点解决)

    时间复杂度: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)// 只有0个或1个结点,则返回
                return pHead;
            ListNode Head=new ListNode(0);
            Head.next=pHead;
            ListNode pre=Head,last=Head.next;
            while(last!=null){
                if(last.next!=null&&last.val==last.next.val){ // 当前结点(last指向的结点)是重复结点
                    while(last.next!=null&&last.val==last.next.val){// 跳过值与当前结点相同的全部结点,找到第一个与当前结点不同的结点
                        last=last.next;
                    }
                    pre.next=last.next;
                    last=last.next;
                }else{// 当前结点不是重复结点
                    last=last.next;
                    pre=pre.next;
                }
                
            }
            return Head.next;
    
        }
    }

    法2:递归。

    /*
     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;
            if(pHead.val==pHead.next.val){ // 当前结点pHead是重复结点
                ListNode tmp=pHead.next;
                while(tmp!=null&&tmp.val==pHead.val){// 跳过值与当前结点相同的全部结点,找到第一个与当前结点不同的结点
                    tmp=tmp.next;
                }
                return deleteDuplication(tmp);// 从第一个与当前结点不同的结点开始递归
            }else{
                pHead.next=deleteDuplication(pHead.next);// 保留当前结点,从下一个结点开始递归
                return pHead;
            }
        }
    }
  • 相关阅读:
    word2vec的Java源码【转】
    将博客搬至CSDN
    去掉中英文符号
    搜索引擎原理和简单过程【转】
    写国际会议论文和期刊的一些注意事项
    Java中Map根据键值(key)或者值(value)进行排序实现
    solr 查询获取数量getCount()
    【solr filter 介绍--转】http://blog.csdn.net/jiangchao858/article/details/54989025
    将中文数字转为数字
    java.util.Properties类的介绍-配置文件的读写【-Z-】
  • 原文地址:https://www.cnblogs.com/xuechengmeigui/p/12624259.html
Copyright © 2020-2023  润新知