美文网首页
leetcode 82. 删除排序链表中的重复元素 II

leetcode 82. 删除排序链表中的重复元素 II

作者: topshi | 来源:发表于2019-05-31 23:38 被阅读0次

    题目描述

    给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
    相关话题: 链表    难度: 中等

    示例 1:
    输入: 1->2->3->3->4->4->5
    输出: 1->2->5

    示例 2:
    输入: 1->1->1->2->3
    输出: 2->3

    思路:

    • 定义一个p指针遍历链表
    • 该题重点是要判断遍历到的节点是否应该删除,很简单,判断条件为p.next.next != null && p.next.val == p.next.next.val,就是判断两个相邻节点是否相等;如果不相等,也就是不需要删除,p前进一位。
    • 如果相等,则先记录下节点的值val,然后继续遍历下去,若节点的值为val,则删除,直至遍历到的节点的值不为val,如下图。

      (注意边界问题)
    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode deleteDuplicates(ListNode head) {
            ListNode dummy = new ListNode(0);
            dummy.next = head;
            head = dummy;
            ListNode p = head;
            while(p.next != null){
                if(p.next.next != null && p.next.val == p.next.next.val){
                    int val = p.next.val;
                    while(p.next != null && p.next.val == val){
                        p.next = p.next.next;
                    }
                }else{
                    p = p.next;
                }
            }
            return head.next;
        }
    }
    

    7个月前的做法,不够简洁

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode deleteDuplicates(ListNode pHead) {
            if(pHead == null) return null;
            ListNode dummyNode = new ListNode(0);
            dummyNode.next = pHead;
            pHead = dummyNode;
            int val = 0;
            while(pHead.next != null && pHead.next.next != null){
                //System.out.println(pHead.next.val);
                if(pHead.next.val != pHead.next.next.val){
                    val = pHead.next.next.val;
                    pHead = pHead.next;
                }else{
                    while(pHead.next != null && pHead.next.val == val){
                        pHead.next = pHead.next.next;
                    }
                    if(pHead.next != null)
                        val = pHead.next.val;
                }
            }
            return dummyNode.next;
        }
    }
    

    相关文章

      网友评论

          本文标题:leetcode 82. 删除排序链表中的重复元素 II

          本文链接:https://www.haomeiwen.com/subject/erbntctx.html