题解 | #删除有序链表中重复的元素-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 {
    /**
     * 思路: 三指针
     * 采用三个指针分别记录第一个节点的上一个节点(prev),第一个节点(p1),和第二个节点(p2),
     * 在遍历链表中比较p1和p2,当val相等的时候,通过循环让p2继续向后走,直到找到一个不相等的节点
     * 此时可以让prev直接指向p2,就完成了重复元素的删除操作   
     * p1和p2不等的时候,就让prev向后移动
     * 最后返回头结点
     * @param head ListNode类 
     * @return ListNode类
     */
    public ListNode deleteDuplicates (ListNode head) {
        if(head == null || head.next == null){
            return head;
        }

        ListNode s = new ListNode(-1);
        s.next = head;
        ListNode prev = s;
        ListNode p1;
        ListNode p2;
        while((p1 = prev.next) != null && (p2 = p1.next) != null){
            if(p1.val == p2.val){
                while((p2 = p2.next) != null && p1.val == p2.val){
                }
                prev.next = p2;
            }else{
                prev = prev.next;
            }
        }
        
        return s.next;
    }
}

全部评论

相关推荐

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