题解 | #删除有序链表中重复的元素-II#

删除有序链表中重复的元素-II

https://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if (head == null) return null;

        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode prev = dummy;
        ListNode curr = head;

        while (curr != null && curr.next != null) {
            if (curr.val == curr.next.val) {
                int val = curr.val;
                while (curr.next != null && curr.next.val == val) {
                    curr = curr.next;
                }
                prev.next = curr.next;
                curr = curr.next;
            } else {
                prev = curr;
                curr = curr.next;
            }
        }

        return dummy.next;
    }
}




就是curr.var与curr.next.var相比,唯一要注意的是每次都要移动2格以上,都要判断curr.next!=null,一旦curr.next==null,就说明已经到了末尾了,不能再进行多格移动了,这个对防止出现NullPointerException非常重要;另一个就是要int var=curr.var因为要防止出现奇数个重复的情况把curr与curr.next删了那么剩下的那个值就会被误判为非重复值。

这就是我犯的错了,算法练习第二题,写的比较艰难,加油!

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务