剑指 offer之删除链表中重复的结点_java
发布日期:2021-05-07 02:40:25 浏览次数:23 分类:精选文章

本文共 1509 字,大约阅读时间需要 5 分钟。

题目:删除链表中重复的结点

题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
自己的解题思路,微low,但是还是要写一下:
解题思路:可以借助一个Map集合来进行记录链表中的元素出现的次数
将出现一次的元素重新组合成为新的链表然后进行返回。
代码实现:

/* public class ListNode {    int val;    ListNode next = null;    ListNode(int val) {        this.val = val;    }}*/import java.util.*;public class Solution {	public ListNode deleteDuplication(ListNode pHead){		Map
mp=new HashMap<>(); while(pHead!=null) { if(mp.containsKey(pHead.val)) { mp.put(pHead.val, mp.get(pHead.val)+1); }else { mp.put(pHead.val, 1); } pHead=pHead.next; } ListNode curN=new ListNode(-1); ListNode cur=curN; Set
keySet = mp.keySet(); Iterator
it = keySet.iterator(); while(it.hasNext()) { int key=it.next(); int val=mp.get(key); if(val==1) { cur.next=new ListNode(key); cur=cur.next; } } return curN.next; }}

借鉴别人的思路:

/* public class ListNode {    int val;    ListNode next = null;    ListNode(int val) {        this.val = val;    }}*/import java.util.*;public class Solution {    public ListNode deleteDuplication(ListNode pHead)    {        ListNode curN=new ListNode(-1);		curN.next=pHead;		ListNode pre=curN;		ListNode last=curN.next;		while(last!=null) {			if(last.next!=null && last.val==last.next.val) {				while(last.next!=null &&last.val==last.next.val) {					last=last.next;				}				pre.next=last.next;				last=last.next;			}else {				pre=pre.next;				last=last.next;			}		}		return curN.next;    }}
上一篇:剑指 offer之二维数组中的查找_java
下一篇:剑指 offer之数字在排序数组中出现的次数_java

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2025年05月07日 21时54分38秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章