题解 | #牛群排列去重# Java

牛群排列去重

https://www.nowcoder.com/practice/8cabda340ac6461984ef9a1ad66915e4

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
        // 将当前节点和前一个节点初始化为头节点
        ListNode cur = head;
        ListNode pre = head;

        while (cur != null) {
            // 如果当前节点的下一个节点为空,表示到达链表尾部,结束循环
            if (cur.next == null)
                break;

            // 如果当前节点的值等于下一个节点的值,说明有重复节点
            if (cur.val == cur.next.val) {
                pre = cur; // pre节点指向当前节点

                while (true) {
                    // 如果当前节点的下一个节点为空或者当前节点的值小于下一个节点的值,
                    // 说明找到了重复节点的最后一个节点,将pre节点的next指向下一个节点,并结束内层循环
                    if (cur.next == null || cur.val < cur.next.val) {
                        pre.next = cur.next;
                        break;
                    }
                    cur = cur.next; // 继续遍历下一个节点
                }
            }
            cur = cur.next; // 当前节点指向下一个节点,继续遍历
        }
        return head; // 返回删除重复节点后的链表头节点
    }
}

主要考察了链表的操作和节点的删除。通过使用两个指针 curpre 来遍历链表,找到重复的节点,并删除重复节点中的所有节点

详细解释如下:

  • 初始化 cur 和 pre 为头节点,开始遍历链表。
  • 如果 cur 的下一个节点为空,说明到达链表尾部,结束循环。
  • 如果 cur 的值等于下一个节点的值,说明有重复节点。将 pre 指向 cur,然后进入内层循环。在内层循环中,判断当前节点 cur 的下一个节点是否为空或者当前节点的值小于下一个节点的值。如果是,说明找到了重复节点的最后一个节点,将 pre 的 next 指向下一个节点,并结束内层循环。如果不是,继续遍历下一个节点。
  • cur 指向下一个节点,继续外层循环。
  • 返回删除重复节点后的链表头节点。
全部评论

相关推荐

04-08 13:31
已编辑
门头沟学院 前端工程师
D0cC:京东营收1万多亿人民币,阿里9000多亿,虽然他俩利润都没腾讯和字节多,但是很恐怖了啊,负担了多少打工人的薪水
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
03-29 12:10
门头沟学院 C++
挣K存W养DOG:散漫消极者淘汰,一眼坑爹。实习几个月转正的时候说你加班太少,能力还行态度不够积极裁了,马上老实。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务