《剑指offer》删除链表中重复的节点

来源:互联网 发布:苹果手机 解压缩软件 编辑:程序博客网 时间:2024/06/01 09:56

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

解析:思想是用集合list存储所有没有重复的元素,然后构造单链表返回就好了。

/* public class ListNode {    int val;    ListNode next = null;    ListNode(int val) {        this.val = val;    }}*/import java.util.ArrayList;import java.util.List;public class Solution {    public ListNode deleteDuplication(ListNode pHead)    {        ListNode head=pHead;        List<Integer> list = new ArrayList<>();//需要构造的单链表        List<Integer> removed = new ArrayList<>();//记录移除过的值        Object obj=null;        while (head!=null){            if(!list.contains(head.val)&&(!removed.contains(head.val))){                list.add(head.val);            }else {                obj=head.val;                list.remove(obj);//list移除的对象,需要转为Object对象再移除                removed.add(head.val);            }            head=head.next;        }        if(list.size()==0){//有可能移除后就没有节点了,例如2->2->2,移除后list为空了            return null;        }        pHead = new ListNode(list.get(0));        for(int i=list.size()-1;i>=1;i--){//头插法创建单链表            ListNode node = new ListNode(list.get(i));            node.next=pHead.next;            pHead.next=node;        }        return  pHead;    }}
原创粉丝点击