删除链表中重复的结点

题目描述

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

时间限制:1秒 空间限制:32768K

解题思路

1、使用ArrayList

先将第一个结点加入ArrayList,并且使用flag标记ArrayList中的当前结点是否重复
再在循环中,检测是否存在重复结点:相同时置为true,否则加入ArrayList中
最后,需要判断ArrayList是否为空,并且要将最后一个结点的next设为null

import java.util.ArrayList;
public class Solution {
    public ListNode deleteDuplication(ListNode pHead)
    {
        if(pHead==null) return null;
        ArrayList array=new ArrayList<>();
        array.add(pHead);
        pHead=pHead.next;
        boolean flag=false;
        int index=0;
        while(pHead!=null){
            if(array.get(index).val==pHead.val) flag=true;
            else{
                if(flag) array.remove(index);
                else index++;
                array.add(pHead);
                flag=false;
            }
            pHead=pHead.next;
        }
        if(flag) array.remove(index);
        if(array.size()==0) return null;
        for(int i=1;i

2、使用递归

public class Solution {
    public ListNode deleteDuplication(ListNode pHead)
    {
        if(pHead==null||pHead.next==null) return pHead;
        if(pHead.val==pHead.next.val){
            ListNode node=pHead.next;
            //跳过与当前结点相同的节点
            while(node.next!=null&&node.val==node.next.val) node=node.next;
            return deleteDuplication(node.next);
        }else{
            pHead.next=deleteDuplication(pHead.next);
            return pHead;
        }
    }
}

你可能感兴趣的:(删除链表中重复的结点)