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

import java.util.*;

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

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param head ListNode类
     * @return ListNode类
     */
    public ListNode deleteDuplicates (ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        //  申明一个空节点
        ListNode result = new ListNode(Integer.MIN_VALUE);
        ListNode temp = result;
        ListNode slow = head;
        ListNode fast = slow.next;
        boolean hasSame = false;
        while (fast != null) {
            // 当快指针和慢指针的数据相等时候,快指针指向下一个元素
            if(slow.val == fast.val) {
                fast = fast.next;
                hasSame = true;
            } else {
                // 快慢指针数据不一样时候,判断上两个元素是否相同
                // 如果相等只需要把慢指针指向快指针,快指针指向下一个元素
                // 如果不相等,把temp的下一个元素指向慢指针
                if(!hasSame) {
                    temp.next = slow;
                    temp = temp.next;
                }
                slow = fast;
                fast = slow.next;

                hasSame = false;
            }
        }

        // 判断最后一个元素是否是重复的元素,如果不是重复的元素,把最后一个元素追加到结果中
        if (!hasSame) {
            temp.next = slow;
        } else {
            temp.next = null;
        }
        return result.next;
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务