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

思路:
1.和TOP 15一样,找到当前节点,利用while循环删除后面的节点。也就是当前重复节点后面肯定是一个非重复节点了
2.再记录pre前一个节点,当当前节点是重复节点是,直接pre的next节点指向已经删除重复节点后的当前节点的下一个节点。如果当前节点不是重复节点,每次pre节点向后偏移即可。


/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    public ListNode deleteDuplicates (ListNode head) {
        // write code here
        if(head == null || head.next == null){
            return head;
        }
        ListNode newHead = new ListNode(-1);
        newHead.next = head;
        ListNode currentNode = head;
        ListNode pre = newHead;

        while(currentNode != null){
            
            boolean isNeedDelete = false;
            ListNode next = currentNode.next;
            while(next != null && currentNode.val == next.val){
                currentNode.next = next.next;
                next = next.next;
                isNeedDelete = true;
            }
            if(isNeedDelete){
                pre.next = currentNode.next;
            }else{
                pre = currentNode;
            }
            currentNode = currentNode.next;
            
            
        }
        return newHead.next;
    }
}
面试必刷TOP101 文章被收录于专栏

面试必刷TOP101

全部评论

相关推荐

10-27 17:26
东北大学 Java
点赞 评论 收藏
分享
10-09 09:39
门头沟学院 C++
HHHHaos:这也太虚了,工资就一半是真的
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务