LeetCode - 剑指 Offer II 029. 排序的循环链表 - java - 细喔

题目

在这里插入图片描述


题目分析

题目给我们的链表,是一个无线循环的链表。【形成一个“环”】
要求我们 在不影响原先升序的情况下,插入一个指定 val 值 的节点。 返回值还是返回 题目给的 head。


解题思维

要求我们在不影响原先链表的升序情况下,插入一个 指定val值的节点。
而且题目给我们head 只是 链表中任意的一个节点,此节点val值,可是最大的,也可能是最小的,又可能是不大不小的那个。
那么,根据题目所给head:
在这里插入图片描述
那么,以它为基础。在它后面插入一个节点。【注意这里是单向链表,在没有的值前一个节点的val值的情况下,是不能在 head节点的前面插入的节点。很可能会影响原先链表的升序排列】
那么了,会有以下三种情况:
在这里插入图片描述
另外还有一种特殊情况: 链表为 空【链表内没有节点】,此时就是直接创造一个 insertVal 节点,将其 next 值 置为 本身,让它自身成为  一个“环” / 一个循环。
在这里插入图片描述


代码如下:

class Solution {
    
    
    public Node insert(Node head, int insertVal) {
    
    
    // 特殊情况
        if(head == null){
    
    
            head = new Node(insertVal);
            head.next = head;
            return head;
        }
        Node cur = head;
        Node flag = null;
        while(cur != flag){
    
    
            if(flag == null){
    
    // 标记 head 头节点位置,作为后面跳出循环的条件
                flag = head;
            }
            // 情况 1  和 情况 2
            if((cur.val <= insertVal && cur.next.val >= insertVal) || (cur.val > cur.next.val && (insertVal>=cur.val || insertVal <= cur.next.val))){
    
    
                Node node = new Node(insertVal,cur.next);
                cur.next = node;
                return head;
            }
            cur = cur.next;// 遍历链表,寻找符合 条件 的节点
        }
        // 情况 3
        Node node = new Node(insertVal,cur.next);
        cur.next = node;
        return head;
    }
}

在这里插入图片描述


代码细节

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/DarkAndGrey/article/details/122477344