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

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

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

总结下解题思路:

  1. 框架逻辑就是正常的新建链表过程
  2. 问题的核心是找到不重复的节点,所以这里采用了递归进行查找,没有使用官方的curr.next.next 的办法。这种更加符合我个人的思考习惯。先解决框架问题后,再解决局部问题。

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) {
        // write code here
        if (head == null || head.next == null) {
            return head;
        }

        ListNode newHead = null;
        ListNode p1 = null;
        ListNode curr = head;
        while (curr != null) {
            curr = getSigleListNode(curr);
            if (newHead == null) {
                newHead = curr;
                p1 = curr;
                if (curr != null) {
                    curr = curr.next;
                }
                continue;
            }

            p1.next = curr;
            if (curr != null) {
                curr = curr.next;
            }
            p1 = p1.next;
        }
        return newHead;
    }

    private ListNode getSigleListNode(ListNode curr) {
        if (curr == null){
            return null;
        }
        ListNode p2 = curr;
        curr = curr.next;
        boolean isRepete = false;
        while (curr !=null && curr.val == p2.val){
            isRepete = true;
            curr = curr.next;
        }
        if (!isRepete){
            return p2;
        }
        return getSigleListNode(curr);
    }

}

#我的求职思考#
全部评论

相关推荐

我只是一个小白菜:我还用不惯m4,也是山猪吃不了细糠了
投递字节跳动等公司10个岗位
点赞 评论 收藏
分享
08-21 16:35
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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