美文网首页
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