题解 | #删除有序链表中重复的元素-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;
    }
}

全部评论

相关推荐

FFFoly:我也是,现在已经到了学长说的 能面试侃侃而谈的阶段了,但是已经没有公司给我面了
远程面试的尴尬瞬间
点赞 评论 收藏
分享
牛客41406533...:回答他在课上学,一辈子待在学校的老教授用三十年前的祖传PPT一字一句的讲解,使用谭浩强红皮书作为教材在devc++里面敲出a+++++a的瞬间爆出114514个编译错误来学这样才显得专业
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务